Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 29611|Antwoord: 2

[Redis] Redis gebruikt Lua-scripts voor gedetailleerde uitleg

[Link kopiëren]
Geplaatst op 30-04-2021 15:42:57 | | | |
Wat Redis betreft, gebruikt iedereen het vaak, en het meest gebruikte scenario is data caching.

recensie

Redis-persistentieverschil tussen RDB en AOF
https://www.itsvse.com/thread-9555-1-1.html

De Docker-installatie draait de Redis-cache
https://www.itsvse.com/thread-8995-1-1.html

Voorbeelden verklaren wat Redis-cachepenetratie, cachelawine en cache-breakdown zijn
https://www.itsvse.com/thread-8968-1-1.html

Redis wildcards om sleutels in bulk te verwijderen
https://www.itsvse.com/thread-7957-1-1.html

CentOS 7 installatie Redis 5.0.3 tutorial
https://www.itsvse.com/thread-7201-1-1.html

Installeer de Redis-extensie onder php 5.5.7 onder CentOS
https://www.itsvse.com/thread-7200-1-1.html

Hoeveel sleutels kunnen in een redis-instantie worden opgeslagen, en wat zijn de maximale sleutels en waarden?
https://www.itsvse.com/thread-6848-1-1.html

De kwestie van redis Chinese kan niet correct worden weergegeven
https://www.itsvse.com/thread-5032-1-1.html

Redis maakt externe toegang mogelijk
https://www.itsvse.com/thread-5011-1-1.html

Windows start de Redis-service niet op, fout 1067: Proces beëindigt onverwacht.
https://www.itsvse.com/thread-5010-1-1.html

CentOS installeerde Redis 4.0.8
https://www.itsvse.com/thread-4614-1-1.html

Redis stelt externe verbinding en toegangswachtwoorden in
https://www.itsvse.com/thread-4101-1-1.html

Redis leegt de datacache
https://www.itsvse.com/thread-4027-1-1.html

Redis-persistentieconfiguratie en uitgeschakelde persistentie
https://www.itsvse.com/thread-4012-1-1.html

Het verschil tussen save en bgsave in redis
https://www.itsvse.com/thread-4010-1-1.html

Redis twee persistentiemethoden en -principes
https://www.itsvse.com/thread-4009-1-1.html

Redis heeft drie manieren om te beginnen
https://www.itsvse.com/thread-4008-1-1.html

Redis-methode om commandoregelvensters te verbergen
https://www.itsvse.com/thread-2988-1-1.html

Redis Hash Hash Hash Waarde Probleem
https://www.itsvse.com/thread-2587-1-1.html

5 dingen die je moet weten voordat je Redis gebruikt
https://www.itsvse.com/thread-2580-1-1.html

Redis wijzigt het standaard poortnummer en stelt het toegangswachtwoord in
https://www.itsvse.com/thread-2577-1-1.html

Redis Windows 64-bit download, officieel downloadadres
https://www.itsvse.com/thread-2576-1-1.html
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)




Vorig:.NET/C# Lock Principle Monitor biedt een diepgaande uitleg
Volgend:IIS DELETE PUT verzoek 405-oplossing
 Huisbaas| Geplaatst op 10-05-2021 09:18:34 |

De hyperlink-login is zichtbaar.
Het Redis Script Load-commando wordt gebruikt om scriptscript aan de scriptcache toe te voegen, maar het wordt niet direct uitgevoerd.

Het EVAL-commando voegt het script ook toe aan de scriptcache, maar evalueert het invoerscript direct.

Als het gegeven script al in de cache staat, wordt er geen actie ondernomen.

Nadat het script aan de cache is toegevoegd, kan het script worden aangeroepen met behulp van de SHA1-checksum van het script via het EVALSHA-commando. (Dit betekent ook.)Hetzelfde script voert dezelfde sha1-waarde uit op elke andere redis-server

Scripts kunnen oneindig lang in de cache blijven totdat de SCRIPT FLUSH wordt uitgevoerd.



 Huisbaas| Geplaatst op 12-05-2021 11:38:55 |
Bepaal of het lua-script in de cache zit


Nadat Redis opnieuw is opgestart, wordt het Lua-script automatisch gewist, niet permanent zal zijn

Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com