Med hensyn til Redis bruger alle det ofte, og det mest brugte scenarie er datacache.
anmeldelse
Fra og med redis 2.6.0 har redis en indbygget Lua-fortolker og giver en evalueringskommando til at parse Lua-scriptets evaluering.
Syntaks: eval-script numkeys keys args
Parametre:
eval — Redis giver kommandoer til at parse lua-skriften
Manuskript — Lua-manuskript
numkeys — Angiver antallet af nøgler i nøglenavnsparametersættet
keys — Nøglenavnets parametersætt, repræsenteret ved det globale variabelarray KEYS, startende med et indeks på 1
args — Et sæt nøgleværdiparametre, repræsenteret ved et array af globale variable ARGV, begyndende med et indeks på 1
Fordele ved at bruge Lua i Redis
Reducer netværksoverhead. Flere forespørgsler kan sendes på én gang i form af scripts for at reducere netværkslatens Atommanipulation. Redis vil udføre hele scriptet som en helhed, uden andre kommandoer indsat imellem. Derfor er der ingen grund til at bekymre sig om racebetingelser og transaktioner under scripting-processen. Genindsat. De fodtrin, klienten sender, gemmes vedvarende i redis, så andre klienter kan genbruge scriptet uden at skulle bruge kode til at fuldføre den samme logik.
Skriftatomicitet
Lua-scripts kan ikke have tidskrævende operationer eller døde løkker, ellers vil redis ikke acceptere andre kommandoer og udføre for at stoppe scriptet
Redis bruger en enkelt Lua-fortolker til at køre alle scripts og sikrer, at scripts udføres atomisk.Det betyder, at når et script kører, vil ingen andre scripts eller redis-kommandoer blive udført! Derfor, hvis det nuværende script kører langsomt, kan serveren muligvis ikke udføre kommandoen, fordi den er optaget, for eksempel:
Hvert script har en maksimal eksekveringstidsgrænse, standardværdien er 5 sekunder. Den maksimale eksekveringstid styres af lua-time-limit-muligheden i konfigurationsfilen redis.conf, eller direkte ved at bruge config get og config set-kommandoerne. Når en scriptudførelse når sin maksimale eksekveringstid, afslutter Redis det ikke aktivt, men udfører følgende trin:
(1) Redis noterer, at et manuskript er ved at løbe tør for tid
(2) Redis begynder at genacceptere anmodninger fra andre klienter, men accepterer kun udførelsen af script kill-kommandoer og nedlukning af nosave.
(3) Hvis scriptet kun udfører læseoperationer, brug script kill-kommandoen til straks at stoppe scriptet; Hvis scriptet udfører en skriveoperation, er det kun shutdown save/nosave-kommandoen, der må stoppe serveren for at forhindre, at de aktuelle data bliver skrevet til disken. (På dette tidspunkt er serveren nede, og dataene vil ikke blive gemt)
eksempel
Udfør scriptet, parametrene er 2 nøgler og værdi, og kommandoen er som følger:
Deadloop-scripts, hvis du udfører følgende script, vil redis ikke kunne behandle andre kommandoer og sidde fast:
Prøv at bruge et script til at tilføje data af typestrengen med følgende kommando:
Udfør nogle mere komplekse scripts, hvis nøglens værdi er lig med den værdi, vi sendte ind, så slet cachen, ellers gør du hvad som helst, kommandoen er som følger:
Resultaterne af implementeringen er som følger:
(Slut)
|