Lua-Skripte - Amazon ElastiCache

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Lua-Skripte

Valkey und Redis OSS unterstützen mehr als 200 Befehle, einschließlich solcher zum Ausführen von Lua-Skripten. Bei Lua-Skripten gibt es jedoch mehrere Fallstricke, die sich auf den Speicher und die Verfügbarkeit von Valkey oder Redis auswirken können. OSS

Nicht parametrisierte Lua-Skripte

Jedes Lua-Skript wird auf dem Valkey- oder Redis-Server zwischengespeichert, bevor es ausgeführt wird. OSS Unparametrisierte Lua-Skripten sind einzigartig, was dazu führen kann, dass der Valkey- oder OSS Redis-Server eine große Anzahl von Lua-Skripten speichert und mehr Speicher verbraucht. Um dem entgegenzuwirken, stellen Sie sicher, dass alle Lua-Skripten parametrisiert sind und bei Bedarf regelmäßig zwischengespeicherte Lua-Skripts bereinigen. SCRIPT FLUSH

Das folgende Codebeispiel zeigt, wie parametrisierte Skripte verwendet werden. Zunächst haben wir ein Beispiel für einen nicht parametrisierten Ansatz, der zu drei verschiedenen zwischengespeicherten Lua-Skripten führt. Dieser Ansatz wird nicht empfohlen:

eval "return redis.call('set','key1','1')" 0 eval "return redis.call('set','key2','2')" 0 eval "return redis.call('set','key3','3')" 0

Verwenden Sie stattdessen das folgende Muster, um ein einzelnes Skript zu erstellen, das übergebene Parameter akzeptieren kann:

eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key1 1 eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key2 2 eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key3 3

Lang andauernde Lua-Skripte

Lua-Skripte können mehrere Befehle atomar ausführen, sodass die Ausführung länger dauern kann als bei einem normalen Valkey- oder Redis-Befehl. OSS Wenn das Lua-Skript nur schreibgeschützte Operationen ausführt, können Sie es zwischendurch beenden. Sobald das Lua-Skript jedoch einen Schreibvorgang ausführt, kann es nicht mehr beendet werden und muss vollständig ausgeführt werden. Ein mutierendes Lua-Skript mit langer Laufzeit kann dazu führen, dass der Valkey- oder OSS Redis-Server lange Zeit nicht reagiert. Zur Behebung dieses Problems vermeiden Sie lang andauernde Lua-Skripte und testen Sie das Skript in einer Vorproduktionsumgebung.

Lua-Skript mit Stealth-Schreibvorgängen

Es gibt mehrere Möglichkeiten, wie ein Lua-Skript weiterhin neue Daten in Valkey oder Redis schreiben kann, auch wenn Valkey oder OSS Redis beendet ist: OSS maxmemory

  • Das Skript startet, wenn sich der Valkey- oder OSS Redis-Server unten maxmemory befindet, und enthält mehrere Schreiboperationen

  • Der erste Schreibbefehl des Skripts verbraucht keinen Speicher (z. B.DEL), gefolgt von weiteren Schreibvorgängen, die Speicher verbrauchen

  • Sie können dieses Problem verringern, indem Sie auf einem anderen Valkey- oder OSS Redis-Server als eine geeignete Räumungsrichtlinie konfigurieren. noeviction Auf diese Weise kann Redis Elemente OSS entfernen und Speicherplatz zwischen Lua-Skripten freigeben.