Was Redis betrifft, so verwendet es oft jeder, und das am häufigsten verwendete Szenario ist das Daten-Caching.
Rezension
Ab Redis 2.6.0 verfügt Redis über einen eingebauten Lua-Interpreter und bietet einen Eval-Befehl zur Analyse der Lua-Skriptbewertung.
Syntax: Eval-Skript numkeys keys args
Parameter:
eval — Redis gibt Befehle zur Analyse der Lua-Schrift
Schrift — Lua-Schrift
numkeys — Spezifiziert die Anzahl der Schlüssel im Schlüsselnamen-Parametersatz
keys — Der Schlüsselname-Parametersatz, dargestellt durch das globale Variable KEYS-Array, beginnend mit einem Index von 1
args — Eine Menge von Schlüssel-Wert-Parametern, dargestellt durch ein Array globaler Variablen ARGV, beginnend mit einem Index von 1
Vorteile der Verwendung von Lua in Redis
Reduziere den Netzwerk-Overhead. Mehrere Anfragen können gleichzeitig in Form von Skripten gesendet werden, um die Netzwerklatenz zu reduzieren Atomare Manipulation. Redis führt das gesamte Skript als Ganzes aus, ohne dass weitere Befehle dazwischen eingefügt werden. Daher müssen sich während des Skriptprozesses keine Sorgen um Rennbedingungen und Transaktionen machen. Wieder eingesetzt. Die vom Client gesendeten Schritte werden dauerhaft in Redis gespeichert, damit andere Clients das Skript wiederverwenden können, ohne Code verwenden zu müssen, um dieselbe Logik zu vervollständigen.
Schriftatomizität
Lua-Skripte dürfen keine zeitaufwändigen Operationen oder Deadloops haben, sonst akzeptiert Redis keine anderen Befehle und führt aus, um das Skript zu stoppen
Redis verwendet einen einzelnen Lua-Interpreter, um alle Skripte auszuführen, und stellt sicher, dass die Skripte atomar ausgeführt werden.Das bedeutet, dass während eines laufenden Skripts keine anderen Skripte oder Redis-Befehle ausgeführt werden! Daher kann der Server, wenn das aktuelle Skript langsam läuft, den Befehl möglicherweise nicht ausführen, weil er besetzt ist, zum Beispiel:
Jedes Skript hat ein maximales Ausführungszeitlimit, der Standardwert beträgt 5 Sekunden. Die maximale Ausführungszeit wird durch die lua-time-limit-Option der Konfigurationsdatei redis.conf oder direkt durch die Befehle config get und config set gesteuert. Wenn die Ausführung eines Skripts seine maximale Ausführungszeit erreicht, beendet Redis es nicht aktiv, sondern führt die folgenden Schritte durch:
(1) Redis vermerkt, dass einem Skript die Zeit davonläuft
(2) Redis beginnt, Anfragen von anderen Clients erneut zu akzeptieren, akzeptiert aber nur die Ausführung von Script-Kill-Befehlen und Shutdown-Nosave.
(3) Wenn das Skript nur Leseoperationen durchführt, verwenden Sie den Script Kill-Befehl, um das Skript sofort zu stoppen; Wenn das Skript eine Schreiboperation durchführt, darf nur der Befehl Shutdown save/nosave den Server stoppen, um zu verhindern, dass die aktuellen Daten auf die Festplatte geschrieben werden. (Zu diesem Zeitpunkt ist der Server ausgefallen und die Daten werden nicht gespeichert.)
Beispiel
Führe das Skript aus, die Parameter sind 2 Schlüssel und Wert, und der Befehl lautet wie folgt:
Bei Deadloop-Skripten führt das Ausführen des folgenden Skripts dazu, dass Redis andere Befehle nicht verarbeiten kann und stecken bleibt:
Versuchen Sie, mit einem Skript Daten der Typ-String mit folgendem Befehl hinzuzufügen:
Führe einige komplexere Skripte aus, wenn der Wert des Schlüssels gleich dem von uns übergebenen Wert ist, dann lösche den Cache, sonst machst du irgendetwas, der Befehl lautet wie folgt:
Die Ergebnisse der Umsetzung sind wie folgt:
(Ende)
|