Относно redis, всички често го използват, а най-често използваният сценарий е кеширането на данни.
преглед
Започвайки с redis 2.6.0, redis има вграден Lua интерпретатор и предоставя команда за оценка на Lua скриптовете за разбор.
Синтаксис: eval script numkeys keys args
Параметри:
eval — Redis предоставя команди за парсиране на lua скрипта
Скрипт — Lua Script
numkeys — Определя броя на ключовете в набора от параметри на ключови имена
ключове — Наборът от параметри на ключови имена, представен от масива на глобалната променлива KEYS, започващ с индекс 1
args — Набор от ключови параметри, представени чрез масив от глобални променливи ARGV, започващи с индекс 1
Предимства на използването на Lua в Redis
Намалете натоварването на мрежата. Могат да се изпращат множество заявки едновременно под формата на скриптове за намаляване на мрежовото забавяне Атомна манипулация. Redis изпълнява целия скрипт като цяло, без да се добавят други команди между тях. Затова няма нужда да се притеснявате за състезателните условия и транзакции по време на процеса на скриптиране. Възстановен. Стъпките, изпратени от клиента, постоянно се съхраняват в redis, така че другите клиенти да могат да използват скрипта повторно, без да се налага да използват код за завършване на същата логика.
Атомност на скрипта
Lua скриптовете не могат да имат времеемки операции или мъртви цикли, в противен случай redis няма да приема други команди и ще се изпълнява, за да спре изпълнението на скрипта
Redis използва един Lua интерпретатор за изпълнение на всички скриптове и гарантира, че скриптовете се изпълняват атомарно.Това означава, че когато скрипт работи, няма да се изпълняват други скриптове или redis команди! Следователно, ако текущият скрипт работи бавно, сървърът може да не успее да изпълни командата, защото е зает, например:
Всеки скрипт има максимален лимит за изпълнение, като по подразбиране стойността е 5s. Максималното време за изпълнение се контролира чрез опцията lua-time-limit в конфигурационния файл redis.conf или директно чрез използване на командите config get и config set. Когато изпълнението на скрипт достигне максималното си време за изпълнение, Redis не го прекратява активно, а извършва следните стъпки:
(1) Redis записва, че един сценарий изчерпва времето си
(2) Redis започва да приема повторно заявки от други клиенти, но приема само изпълнение на команди за унищожаване на скрипт и изключване на носейв.
(3) Ако скриптът изпълнява само операции за четене, използвайте командата за убиване на скрипта, за да спрете скрипта незабавно; Ако скриптът извърши операция за запис, само командата shutdown save/nosave може да спре сървъра и да предотврати записването на текущите данни на диска. (В този момент сървърът не работи и данните няма да бъдат запазени)
пример
Изпълнете скрипта, параметрите са 2 ключа и стойност, а командата е следната:
Deadloop скриптове при изпълнение на следния скрипт ще накара redis да не може да обработва други команди и да се заседне:
Опитайте да използвате скрипт, за да добавите данни с тип низ със следната команда:
Изпълнете някои по-сложни скриптове, ако стойността на ключа е равна на въведената стойност, след това изтрийте кеша, иначе направете каквото и да е, командата е следната:
Резултатите от изпълнението са следните:
(Край)
|