Čo sa týka redis, často ho používa každý, a najpoužívanejším scenárom je dátové cacheovanie.
revízia
Od redis 2.6.0 má redis zabudovaný interpret Lua a poskytuje príkaz eval na analýzu hodnotenia Lua skriptov.
Syntax: eval script numkeys keys args
Parametre:
eval — Redis poskytuje príkazy na spracovanie lua skriptu
Skript — Lua Script
numkeys — Špecifikuje počet kľúčov v množine parametrov názvov kľúčov
keys — Množina parametrov názvov kľúčov, reprezentovaná globálnym poľom KEYS začínajúcim dolným indexom 1
args — Množina kľúčovo-hodnotových parametrov, reprezentovaných poľom globálnych premenných ARGV, začínajúc indexom 1
Výhody použitia Lua v Redis
Znížte režijné zaťaženie siete. Viacero požiadaviek je možné posielať naraz vo forme skriptov na zníženie latencie siete Atómová manipulácia. Redis vykoná celý skript ako celok, bez ďalších príkazov medzi nimi. Preto nie je potrebné sa obávať podmienok pretekov a transakcií počas procesu skriptovania. Znovu prijatý. Kroky, ktoré klient posiela, sú trvalo ukladané v redise, aby ostatní klienti mohli skript znovu použiť bez nutnosti používať kód na dokončenie rovnakej logiky.
Atómovosť skriptu
Lua skripty nemôžu mať časovo náročné operácie alebo mŕtve cykly, inak redis neprijme iné príkazy a nevykoná ho na zastavenie spustenia skriptu
Redis používa jeden Lua interpreter na spustenie všetkých skriptov a zabezpečuje, že skripty sa vykonávajú atómicky.To znamená, že keď je skript bežaný, žiadne iné skripty ani príkazy redis sa nespúšťajú! Preto, ak aktuálny skript beží pomaly, server nemusí byť schopný príkaz vykonať, pretože je zaneprázdnený, napríklad:
Každý skript má maximálny časový limit na vykonanie, predvolená hodnota je 5s. Maximálny čas vykonávania je riadený možnosťou časového limitu lua v konfiguračnom súbore redis.conf alebo priamo pomocou príkazov configget a config set. Keď vykonanie skriptu dosiahne maximálny čas vykonávania, Redis ho aktívne neukončí, ale vykoná nasledujúce kroky:
(1) Redis zaznamenáva, že skript sa kráti
(2) Redis začína opätovne prijímať požiadavky od iných klientov, ale akceptuje len vykonávanie príkazov na ukončenie skriptu a vypnutie nosave.
(3) Ak skript vykonáva iba čítacie operácie, použite príkaz script kill na okamžité zastavenie skriptu; Ak skript vykoná zápisovú operáciu, iba príkaz na vypnutie uloženia/nosave môže zastaviť server a zabrániť zápisu aktuálnych dát na disk. (V tomto bode je server mimo prevádzky a dáta sa neuložia)
príklad
Spustite skript, parametre sú 2 kľúč a hodnota a príkaz je nasledovný:
Deadloop skripty, spustenie nasledujúceho skriptu spôsobí, že redis nebude schopný spracovať iné príkazy a zasekne sa:
Skúste použiť skript na pridanie dát typu string pomocou nasledujúceho príkazu:
Vykonajte zložitejšie skripty, ak je hodnota kľúča rovná hodnote, ktorú sme zadali, potom vymažte cache, inak urobte čokoľvek, príkaz je nasledovný:
Výsledky implementácie sú nasledovné:
(Koniec)
|