Kar zadeva Redis, ga pogosto uporabljajo vsi, najbolj uporabljen scenarij pa je predpomnjenje podatkov.
pregled
Od redis 2.6.0 naprej ima redis vgrajen interpreter Lua in zagotavlja ukaz eval za analizo ocenjevanja Lua pisave.
Sintaksa: eval script numkeys keys args
Parametri:
eval — Redis zagotavlja ukaze za razčlenjevanje lua skripte
Skripta — Lua Skripta
numkeys — Določa število ključev v naboru parametrov imen ključev
keys — Množica parametrov imena ključev, predstavljena z globalno spremenljivko KEYS, ki se začne s indeksom 1
args — Množica parametrov ključ-vrednost, predstavljena z nizom globalnih spremenljivk ARGV, ki se začnejo s spodnjim indeksom 1
Prednosti uporabe Lua v Redis
Zmanjšajte obremenitev omrežja. Več zahtevkov je mogoče poslati hkrati v obliki skript za zmanjšanje omrežne zakasnitve Atomska manipulacija. Redis izvede celoten skript kot celoto, brez dodatnih ukazov vmes. Zato ni treba skrbeti za pogoje dirk in transakcije med procesom skriptiranja. Ponovno sprejet. Koraki, ki jih pošlje odjemalec, se trajno shranjujejo v redisu, da lahko drugi odjemalci ponovno uporabijo skripto brez potrebe po uporabi kode za dokončanje iste logike.
Atomičnost pisave
Lua skripte ne smejo imeti časovno potratnih operacij ali mrtvih zank, sicer redis ne bo sprejel drugih ukazov in se izvedel, da ustavi zagon skripte
Redis uporablja en sam Lua interpreter za izvajanje vseh skript in zagotavlja, da se skripte izvajajo atomsko.To pomeni, da se med izvajanjem skripte ne izvajajo nobeni drugi skripti ali redis ukazi! Zato, če trenutni skript teče počasi, strežnik morda ne bo mogel izvesti ukaza, ker je zaseden, na primer:
Vsaka skripta ima največji časovni limit izvajanja, privzeta vrednost je 5s. Največji čas izvajanja je nadzorovan z možnostjo časovne omejitve lua v konfiguracijski datoteki redis.conf ali neposredno z uporabo ukazov config get in config set. Ko izvajanje skripte doseže največji čas izvajanja, ga Redis ne prekine aktivno, temveč izvede naslednje korake:
(1) Redis beleži, da skripta zmanjkuje časa
(2) Redis začne ponovno sprejemati zahteve drugih odjemalcev, vendar sprejema le izvajanje ukazov za ukinitev skripte in izklop nosave.
(3) Če skripta izvaja samo operacije branja, uporabite ukaz za ukinitev skripte, da takoj ustavite skripto; Če skripta izvede operacijo pisanja, je dovoljen le ukaz za zaustavitev shranjevanja/brez shranjevanja, ki ustavi strežnik in prepreči zapis trenutnih podatkov na disk. (V tem trenutku je strežnik nedosegljiv in podatki ne bodo shranjeni)
primer
Izvedite skripto, parametri so 2 ključ in vrednost, ukaz pa je naslednji:
Deadloop skripte, izvajanje naslednjega skripta povzroči, da redis ne more obdelovati drugih ukazov in se zatakne:
Poskusite uporabiti skripto za dodajanje podatkov tipa niz z naslednjim ukazom:
Izvedite nekaj bolj zapletenih skript, če je vrednost ključa enaka vrednosti, ki smo jo prenesli, nato izbrišite predpomnilnik, sicer naredite karkoli, ukaz je naslednji:
Rezultati izvedbe so naslednji:
(Konec)
|