2017-03-29 10 views

Antwort

4

Eine Transaktion? sicher. Ein Befehl? Denke nicht.

Innerhalb einer Transaktion verwenden Sie SETNX, um einen Schlüssel festzulegen, wenn es nicht existiert, und dann den Wert zu erhalten.

MULTI 
SETNX keyName value 
GET keyName 
EXEC 
+0

Dank für Ihre Antwort. Wie könnte ich in Ihrem Ansatz EXPIRE auf den Schlüsselnamen setzen, wenn es vorher nicht existierte? – andrew231

+1

Wenn Sie redis 2.6 oder höher verwenden, können Sie dies mit einem set-Befehl erreichen: 'SET keyName Wert NX EX timeout_seconds'. Siehe https://redis.io/commands/set – Triptych

2

(Disclaimer: Ich bin Lua Art von Kerl, ist die akzeptierte Antwort vollkommen gültig) Eine serverseitige Lua Script? sicher. Ein Befehl? Denken Sie nicht so;)

Hier ist eine Möglichkeit, es mit EVAL tun:

local v = redis.call('GET', KEYS[1]) 
if v then 
    return v 
end 
return redis.call('SET', KEYS[1], ARGV[1]) 
+0

In Bezug auf Geschwindigkeit glauben Sie, dass der Lua-Ansatz den MULTI-Ansatz übertreffen würde? – andrew231

+0

Sie sollten ungefähr gleich sein, aber Sie können das leicht vergleichen. –

Verwandte Themen