2017-12-05 6 views

Antwort

4

Es gibt keinen einzigen Befehl. Sie können entweder ein Lua-Skript schreiben oder eine Transaktion ausführen. Eine Transaktion würde sich einfach wie:

127.0.0.1:6379> SET foo bar 
OK 
127.0.0.1:6379> MULTI 
OK 
127.0.0.1:6379> GET foo 
QUEUED 
127.0.0.1:6379> DEL foo 
QUEUED 
127.0.0.1:6379> EXEC 
1) "bar" 
2) (integer) 1 

ein Lua-Script verwendet

127.0.0.1:6379> SET foo bar 
OK 
127.0.0.1:6379> EVAL "local x = redis.call('GET', KEYS[1]); redis.call('DEL', KEYS[1]); return x" 1 foo 
"bar" 
127.0.0.1:6379> GET foo 
(nil) 

beide gleich funktionieren, aber mit Lua-Script, kann das Skript im Cache gespeichert werden und es gibt keine Notwendigkeit, den gesamten Code zu wiederholen Das nächste Mal möchten Sie es anrufen. Wir können SCRIPT LOAD verwenden, das die Skripte zwischenspeichert und eine eindeutige ID zurückgibt, die als Funktionsname für nachfolgende Aufrufe verwendet wird (die meisten Clients abstrahieren dies transparent), z.

127.0.0.1:6379> SCRIPT LOAD "local x = redis.call('GET', KEYS[1]); redis.call('DEL', KEYS[1]); return x" 
"89d675c84cf3bd6b3b38ab96fec7c7fb2386e4b7" 

127.0.0.1:6379> SET foo bar 
OK 

# Now we use the returned SHA of the script to call it without parsing it again: 
127.0.0.1:6379> EVALSHA 89d675c84cf3bd6b3b38ab96fec7c7fb2386e4b7 1 foo 
"bar" 
+0

Alternativ könnte man ein Modul dafür entwickeln;) (upvoted oc). –

+0

Wird in der Transaktion ein weiterer Befehl wie decr zwischen GET und DEL Befehl ausgeführt? – FridayLi

+0

@FridayLi kann nicht während der Ausführung der Transaktion passieren, nur während Sie die Transaktion puffern. –

Verwandte Themen