2017-03-29 14 views

回答

4

一筆交易?當然。一個命令?不要這樣想。

在一個事務中,使用SETNX設置一個密鑰(如果它不存在),然後獲取該值。

MULTI 
SETNX keyName value 
GET keyName 
EXEC 
+0

謝謝您的回答。 在你的方法中,如果以前不存在,我將如何在keyName上設置EXPIRE? – andrew231

+1

如果您使用的是Redis 2.6或更高版本,則可以使用set命令完成此操作:SET鍵名值NX EX timeout_seconds。請參閱https://redis.io/commands/set – Triptych

2

(免責聲明:我是一個Lua的那種人,接受的答案是完全有效的)一個服務器端Lua中?當然。一個命令?不這麼認爲;)

下面是與EVAL做的一種方式:

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

就速度而言,您認爲Lua方法會超越MULTI方法嗎? – andrew231

+0

它們應該大致相同,但您可以輕鬆地進行基準測試。 –

相關問題