Atomare Operationen und Transaktionen
Verwenden Sie Lua-Skripte, um mehrstufige atomare Redis-Operationen auszuführen
Atomare Operationen und Transaktionen ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum atomare mehrstufige Operationen?
Viele Redis-Anwendungsfälle erfordern das Lesen und Schreiben mehrerer Schlüssel innerhalb einer einzigen konsistenten Operation. Ohne Atomarität können Race Conditions den Zustand beschädigen.
Die Race Condition beim Lesen, Ändern und Schreiben
Ohne Lua: GET counter → Änderung im Client → SET counter. Zwei Clients können denselben Wert lesen, ihn beide ändern, und der zweite SET überschreibt die Änderungen des ersten.
Lösung mit Lua-Skript
Mit Lua in Redis erfolgen Lesen, Ändern und Schreiben atomar innerhalb des Servers.
EVAL "
local val = redis.call('GET', KEYS[1])
val = tonumber(val) or 0
val = val + tonumber(ARGV[1])
redis.call('SET', KEYS[1], val)
return val
" 1 counter 5Compare-and-Swap
Implementieren Sie CAS (Compare-and-Swap) atomar – aktualisieren Sie den Wert nur, wenn der aktuelle Wert dem erwarteten Wert entspricht.
EVAL "
local cur = redis.call('GET', KEYS[1])
if cur == ARGV[1] then
redis.call('SET', KEYS[1], ARGV[2])
return 1
end
return 0
" 1 mykey expected newvalueVerteilte Sperre
Erwerben Sie eine Sperre atomar: SET key value NX EX seconds. Dies ist das sichere Muster – das entsprechende Lua-Pendant.
EVAL "
if redis.call('SET', KEYS[1], ARGV[1], 'NX', 'EX', ARGV[2]) then
return 1
end
return 0
" 1 lock:resource "owner-uuid" 30Die Sperre sicher freigeben
Geben Sie die Sperre nur frei, wenn Sie deren Besitzer sind. Dadurch wird verhindert, dass ein anderer Client die Sperre einer anderen Person freigibt.
EVAL "
if redis.call('GET', KEYS[1]) == ARGV[1] then
return redis.call('DEL', KEYS[1])
end
return 0
" 1 lock:resource "owner-uuid"Transaktionen mit mehreren Schlüsseln
Lua-Skripte können atomar auf mehreren Schlüsseln arbeiten – etwas, das MULTI/EXEC nicht garantieren kann (die Ausführung kann mittendrin fehlschlagen und einen teilweise geänderten Zustand hinterlassen).
MULTI/EXEC im Vergleich zu Lua
MULTI/EXEC stellt Befehle zur gebündelten Ausführung in eine Warteschlange, ist aber in Bezug auf gelesene Werte nicht wirklich atomar (watch/unwatch erhöht die Komplexität). Lua-Skripte sind einfacher und vollständig atomar.
Rollback in Lua
Redis Lua unterstützt keine Transaktionen mit Rollback. Wenn mittendrin ein Fehler auftritt, werden zuvor ausgeführte redis.call-Befehle nicht rückgängig gemacht. Entwerfen Sie Skripte so, dass sie sicher sind, indem Sie zuerst die Voraussetzungen prüfen.
Grenzen für die Skriptgröße
Skripte sollten klein und schnell sein. Komplexe Logik gehört in die Anwendungsschicht, nicht nach Redis. Verwenden Sie Lua nur für den atomaren Abschnitt.
Atomarität testen
Testen Sie Race Conditions mit gleichzeitig arbeitenden Redis-Clients. Überprüfen Sie mit Redis-Benchmark-Tools, dass das Lua-Skript auch bei hoher Nebenläufigkeit einen korrekten Zustand beibehält.
Frage zu atomaren Operationen
Warum ist eine Lese-Ändere-Schreibe-Operation in einem Redis-Lua-Skript sicherer als in Anwendungscode?
Zusammenfassung: Atomare Operationen und Transaktionen
Verwenden Sie Redis-Lua-Skripte für atomare Lese-Ändere-Schreibe-Operationen, CAS und verteilte Sperren. Für Operationen, die von gelesenen Werten abhängen, sind Lua-Skripte einfacher und zuverlässiger als MULTI/EXEC. Halten Sie Skripte minimal und testen Sie sie bei gleichzeitiger Ausführung.
Häufig gestellte Fragen
Ist die Lektion „Atomare Operationen und Transaktionen“ kostenlos?
Ja — der vollständige Text von „Atomare Operationen und Transaktionen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Atomare Operationen und Transaktionen“?
Verwenden Sie Lua-Skripte, um mehrstufige atomare Redis-Operationen auszuführen Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Atomare Operationen und Transaktionen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- EVAL und die Redis-Lua-Umgebung
- Atomare Operationen und Transaktionen
- Ratenbegrenzung mit Lua
- SCRIPT LOAD und EVALSHA