När det gäller Redis använder alla det ofta, och det mest använda scenariot är datacache.
recension
Från och med redis 2.6.0 har redis en inbyggd Lua-tolk och tillhandahåller ett utvärderingskommando för att tolka utvärderingen av Lua-skriptet.
Syntax: evalskript numkeys keys args
Parametrar:
eval — Redis ger kommandon för att tolka lua-skriptet
Manus — Lua-manus
numkeys — Anger antalet nycklar i nyckelnamnsparameteruppsättningen
keys — Nyckelnamnsparameteruppsättningen, representerad av den globala variabeln KEYS-arrayen, med början i ett index på 1
args — En uppsättning nyckelvärdesparametrar, representerade av en array av globala variabler ARGV, med början i ett index av 1
Fördelar med att använda Lua i Redis
Minska nätverksbelastningen. Flera förfrågningar kan skickas samtidigt i form av skript för att minska nätverkslatens Atommanipulation. Redis kommer att köra hela skriptet som en helhet, utan att några andra kommandon läggs in däremellan. Därför finns det inget behov av att oroa sig för raceförhållanden och transaktioner under skriptprocessen. Återinsatt. De fotsteg som skickas av klienten lagras beständigt i redis så att andra klienter kan återanvända skriptet utan att behöva använda kod för att slutföra samma logik.
Skriftatomicitet
Lua-skript kan inte ha tidskrävande operationer eller döda loopar, annars accepterar inte Redis andra kommandon och kör för att stoppa skriptet
Redis använder en enda Lua-tolk för att köra alla skript och säkerställer att skripten körs atomärt.Detta innebär att när ett skript körs kommer inga andra skript eller redis-kommandon att utföras! Därför, om det aktuella skriptet körs långsamt, kan servern kanske inte köra kommandot eftersom det är upptaget, till exempel:
Varje skript har en maximal exekveringstidsgräns, standardvärdet är 5 sekunder. Den maximala exekveringstiden styrs av lua-time-limit-alternativet i konfigurationsfilen redis.conf, eller direkt genom att använda kommandona config get och config set. När en skriptexekvering når sin maximala exekveringstid avslutar Redis det inte aktivt, utan utför följande steg:
(1) Redis noterar att ett manus håller på att få slut på tid
(2) Redis börjar acceptera förfrågningar från andra klienter igen, men accepterar endast exekvering av script kill-kommandon och avstängningsnosave.
(3) Om skriptet endast utför läsoperationer, använd kommandot script kill för att omedelbart stoppa skriptet; Om skriptet utför en skrivoperation tillåts endast kommandot 'stäng av' spar/nosave att stoppa servern för att förhindra att aktuell data skrivs till disk. (Vid det här laget är servern nere och datan kommer inte att sparas)
exempel
Exekverar du skriptet, är parametrarna 2 nyckel och värde, och kommandot är följande:
Deadloop-skript, när man kör följande skript gör att redis inte kan bearbeta andra kommandon och fastnar:
Försök använda ett skript för att lägga till data av typsträng med följande kommando:
Kör några mer komplexa skript, om nyckelns värde är lika med det vi skickade in, ta sedan bort cachen, annars gör du vad som helst, kommandot är följande:
Resultaten av implementeringen är följande:
(Slut)
|