Wat Redis betreft, gebruikt iedereen het vaak, en het meest gebruikte scenario is data caching.
recensie
Vanaf redis 2.6.0 heeft Redis een ingebouwde Lua-interpreter en biedt het een evaluatiecommando om de evaluatie van het Lua-script te parsen.
Syntaxis: eval-script numkeys keys args
Parameters:
eval — Redis geeft commando's om het lua-script te ontleden
Script — Lua Script
numkeys — Specificeert het aantal sleutels in de sleutelnaamparameterset
keys — De sleutelnaamparameterset, weergegeven door de globale variabele KEYS-array, beginnend met een subscript van 1
args — Een set sleutelwaardeparameters, weergegeven door een array van globale variabelen ARGV, beginnend met een subscript van 1
Voordelen van het gebruik van Lua in Redis
Verminder de netwerkoverhead. Meerdere verzoeken kunnen tegelijk worden verzonden in de vorm van scripts om de netwerklatentie te verminderen Atomaire manipulatie. Redis voert het hele script als geheel uit, zonder andere commando's ertussen ingevoegd. Daarom hoef je je tijdens het scriptproces geen zorgen te maken over racecondities en transacties. Hersteld. De voetstappen die door de client worden verzonden, worden continu opgeslagen in redis zodat andere clients het script opnieuw kunnen gebruiken zonder code te hoeven gebruiken om dezelfde logica te voltooien.
Schriftatomiciteit
Lua-scripts kunnen geen tijdrovende bewerkingen of dode lussen hebben, anders accepteert Redis geen andere commando's en voert het uit om het script te stoppen met draaien
Redis gebruikt één Lua-interpreter om alle scripts uit te voeren en zorgt ervoor dat de scripts atomair worden uitgevoerd.Dit betekent dat wanneer een script draait, geen andere scripts of redis-commando's worden uitgevoerd! Daarom, als het huidige script langzaam draait, kan de server het commando mogelijk niet uitvoeren omdat het bezet is, zoals:
Elk script heeft een maximale uitvoeringstijd, de standaardwaarde is 5 seconden. De maximale uitvoeringstijd wordt geregeld door de lua-time-limit-optie van het configuratiebestand redis.conf, of direct door gebruik te maken van de commando's config get en config set. Wanneer een scriptuitvoering zijn maximale uitvoeringstijd bereikt, beëindigt Redis het niet actief, maar voert het de volgende stappen uit:
(1) Redis registreert dat een script door de tijd heen raakt
(2) Redis begint verzoeken van andere clients opnieuw te accepteren, maar accepteert alleen de uitvoering van script kill-commando's en het afsluiten van nosave.
(3) Als het script alleen leesoperaties uitvoert, gebruik dan het script kill-commando om het script onmiddellijk te stoppen; Als het script een schrijfoperatie uitvoert, mag alleen het shutdown save/nosave-commando de server stoppen om te voorkomen dat de huidige data naar de schijf wordt geschreven. (Op dit moment ligt de server uit en worden de gegevens niet opgeslagen)
voorbeeld
Voer het script uit, de parameters zijn 2 sleutels en waarde, en het commando is als volgt:
Deadloop-scripts waarbij het volgende script uitvoert, zorgt ervoor dat Redis geen andere commando's kan verwerken en vastloopt:
Probeer een script te gebruiken om gegevens van het type string toe te voegen met het volgende commando:
Voer enkele complexere scripts uit, als de waarde van de sleutel gelijk is aan de waarde die we hebben doorgegeven, verwijder dan de cache, anders doe je iets, het commando is als volgt:
De resultaten van de implementatie zijn als volgt:
(Einde)
|