Sie werden in Bezug auf die Atomizität gemäß der Redis-Dokumentation in Ordnung sein:
Redis verwendet denselben Lua-Interpreter, um alle Befehle auszuführen. Außerdem garantiert Redis, dass ein Skript atomar ausgeführt wird:kein anderes Skript oder kein Redis-Befehl wird ausgeführt, während ein Skript ausgeführt wird. Diese Semantik ähnelt der von MULTI / EXEC. Aus Sicht aller anderen Clients sind die Auswirkungen eines Skripts entweder noch nicht sichtbar oder bereits abgeschlossen.
Wenn das Skript jedoch zu langsam ist, verursacht es Probleme. Daher ist Skript das Beste für leichte Operationen, die etwas Logik und Atomarität erfordern.
Ein weiteres Schlupfloch, in das Sie geraten könnten, ist, wenn das Skript in der Mitte irgendwie fehlgeschlagen ist, diese Aufrufe, die Sie ausgeführt haben, nicht rückgängig gemacht werden können, obwohl das Skript einen Fehler zurückgibt.
Beispiel:Sie haben ein Skript wie dieses:
redis.call('set', 'foo', 1)
redis.call('rpush', 'foo', 2)
Die Skriptausführung gibt einen Fehler zurück, aber foo
wurde bereits in redis als 1
gesetzt .
Etwas, das nichts mit Ihrer Frage zu tun hat:Mir ist aufgefallen, dass Sie
verwendet habeneval "your_raw_code" key_count keys argv
Eigentlich könnten Sie die Lua-Skriptdatei in eval aufrufen, wenn Sie sich im Terminal befinden:
> redis-cli eval "$(cat path/to/script/script_name.lua)" key_count keys argv