Kalbant apie redis, visi dažnai juo naudojasi, o dažniausiai naudojamas scenarijus yra duomenų talpykla.
Peržiūra
Pradedant nuo redis 2.6.0, redis turi įmontuotą Lua vertėją ir pateikia eval komandą Lua scenarijaus vertinimui analizuoti.
Sintaksė: eval script numkeys keys args
Parametrai:
eval — Redis pateikia komandas lua scenarijui analizuoti
Scenarijus — Lua Script
numkeys — nurodo raktų skaičių keyname parametrų rinkinyje
keys — keyname parametrų rinkinys, vaizduojamas visuotinio kintamojo KEYS masyvu, prasidedančiu 1 indeksu
args — rakto reikšmės parametrų rinkinys, vaizduojamas globalių kintamųjų masyvu ARGV, prasidedančiu indeksu 1
"Lua" naudojimo "Redis" privalumai
Sumažinkite tinklo pridėtines išlaidas. Kelios užklausos gali būti siunčiamos vienu metu scenarijų pavidalu, kad būtų sumažinta tinklo delsa Atominis manipuliavimas. Redis vykdys visą scenarijų kaip visumą, be jokių kitų komandų. Todėl scenarijų kūrimo metu nereikia jaudintis dėl lenktynių sąlygų ir sandorių. Atstatytas. Kliento siunčiami žingsniai nuolat saugomi redis, kad kiti klientai galėtų pakartotinai naudoti scenarijų nenaudodami kodo tai pačiai logikai užbaigti.
Scenarijaus atomiškumas
Lua scenarijai negali turėti daug laiko reikalaujančių operacijų ar negyvų kilpų, kitaip redis nepriims kitų komandų ir vykdys, kad sustabdytų scenarijaus veikimą
Redis naudoja vieną Lua interpretatorių visiems scenarijams vykdyti ir užtikrina, kad scenarijai būtų vykdomi atomiškai.Tai reiškia, kad kai scenarijus veikia, nebus vykdomi jokie kiti scenarijai ar redis komandos! Todėl, jei dabartinis scenarijus veikia lėtai, serveris gali negalėti vykdyti komandos, nes jis užimtas, pvz.:
Kiekvienas scenarijus turi maksimalų vykdymo laiko limitą, numatytoji reikšmė yra 5s. Maksimalus vykdymo laikas valdomas konfigūracijos failo redis.conf lua-time-limit parinktimi arba tiesiogiai naudojant config get ir config set komandas. Kai scenarijaus vykdymas pasiekia maksimalų vykdymo laiką, "Redis" jo aktyviai nenutraukia, atlieka šiuos veiksmus:
(1) Redis įrašo, kad scenarijui baigiasi laikas
(2) Redis pradeda iš naujo priimti užklausas iš kitų klientų, bet priima tik scenarijaus nužudymo komandų vykdymą ir išjungimą nosave.
(3) Jei scenarijus atlieka tik skaitymo operacijas, naudokite scenarijaus nužudymo komandą, kad nedelsdami sustabdytumėte scenarijų; Jei scenarijus atlieka įrašymo operaciją, serverį gali sustabdyti tik išjungimo įrašymo / neįrašymo komanda, kad dabartiniai duomenys nebūtų įrašomi į diską. (Šiuo metu serveris neveikia ir duomenys nebus išsaugoti)
pavyzdys
Vykdykite scenarijų, parametrai yra 2 raktas ir reikšmė, o komanda yra tokia:
Deadloop scenarijai, vykdant šį scenarijų, redis negalės apdoroti kitų komandų ir įstrigs:
Pabandykite naudoti scenarijų, kad įtrauktumėte eilutės tipo duomenis naudodami šią komandą:
Vykdykite keletą sudėtingesnių scenarijų, jei rakto vertė yra lygi vertei, kurią perdavėme, tada ištrinkite talpyklą, kitaip darykite bet ką, komanda yra tokia:
Įgyvendinimo rezultatai yra šie:
(Pabaiga)
|