Når det gjelder Redis, bruker alle det ofte, og det mest brukte scenariet er datacache.
anmeldelse
Fra og med redis 2.6.0 har redis en innebygd Lua-tolk og gir en eval-kommando for å analysere evalueringen av Lua-skriptet.
Syntaks: eval-skript numkeys keys args
Parametere:
eval — Redis gir kommandoer for å tolke lua-skriptet
Manus — Lua-manus
numkeys — Angir antall nøkler i nøkkelnavnparametersettet
keys — Nøkkelnavn-parametersettet, representert av den globale variabelen KEYS-arrayet, som starter med et indeks på 1
args — Et sett med nøkkelverdiparametere, representert av et array av globale variabler ARGV, som starter med et indeks på 1
Fordeler med å bruke Lua i Redis
Reduser nettverksoverhead. Flere forespørsler kan sendes samtidig i form av skript for å redusere nettverksforsinkelse Atommanipulasjon. Redis vil kjøre hele skriptet som en helhet, uten andre kommandoer satt inn imellom. Derfor er det ikke nødvendig å bekymre seg for løpsbetingelser og transaksjoner under skriptprosessen. Gjeninnsatt. Fottrinnene som sendes av klienten lagres kontinuerlig i redis slik at andre klienter kan gjenbruke skriptet uten å måtte bruke kode for å fullføre samme logikk.
Skriftatomisitet
Lua-skript kan ikke ha tidkrevende operasjoner eller døde løkker, ellers vil ikke Redis akseptere andre kommandoer og kjøre for å stoppe skriptet
Redis bruker en enkelt Lua-tolk for å kjøre alle skriptene, og sørger for at skriptene kjøres atomisk.Dette betyr at når et skript kjører, vil ingen andre skript eller redis-kommandoer bli utført! Derfor, hvis det nåværende skriptet kjører sakte, kan serveren kanskje ikke utføre kommandoen fordi den er opptatt, for eksempel:
Hvert skript har en maksimal utførelsestidsbegrensning, standardverdien er 5 sekunder. Maksimal kjøretid styres av lua-time-limit-alternativet i konfigurasjonsfilen redis.conf, eller direkte ved å bruke kommandoene config get og config set. Når en skriptkjøring når sin maksimale utførelsestid, avslutter ikke Redis det aktivt, men utfører følgende trinn:
(1) Redis registrerer at et manus er i ferd med å gå tom for tid
(2) Redis begynner å godta forespørsler fra andre klienter på nytt, men aksepterer kun utførelse av script kill-kommandoer og nedstengnings-nosave.
(3) Hvis skriptet kun utfører leseoperasjoner, bruk kommandoen script kill for å stoppe skriptet umiddelbart; Hvis skriptet utfører en skriveoperasjon, er det kun shutdown save/nosave-kommandoen som kan stoppe serveren for å forhindre at nåværende data skrives til disk. (På dette tidspunktet er serveren nede og dataene vil ikke bli lagret)
eksempel
Kjør skriptet, parameterne er 2 taster og verdi, og kommandoen er som følger:
Deadloop-skript som kjører følgende skript vil føre til at redis ikke kan behandle andre kommandoer og blir sittende fast:
Prøv å bruke et skript for å legge til data av typestrengen med følgende kommando:
Kjør noen mer komplekse skript, hvis verdien til nøkkelen er lik verdien vi sendte inn, slett cachen, ellers gjør hva som helst, kommandoen er som følger:
Resultatene av implementeringen er som følger:
(Slutt)
|