因爲我想在redis中使用事務。我已閱讀redis事務的文檔,並在下面找到。Redis事務和監視命令
WATCH的myKey VAL = GET的myKey VAL = VAL + 1 多 SET的myKey $ VAL EXEC
但如果Redis的交易順序執行和原子那麼我們就不能達到上述同樣的,我的問題是以下語句的行爲?
多 VAL = GET的myKey VAL = VAL + 1 SET的myKey $ VAL EXEC
感謝,
因爲我想在redis中使用事務。我已閱讀redis事務的文檔,並在下面找到。Redis事務和監視命令
WATCH的myKey VAL = GET的myKey VAL = VAL + 1 多 SET的myKey $ VAL EXEC
但如果Redis的交易順序執行和原子那麼我們就不能達到上述同樣的,我的問題是以下語句的行爲?
多 VAL = GET的myKey VAL = VAL + 1 SET的myKey $ VAL EXEC
感謝,
NO,則無法做到這一點。
隨着MULTI
和EXEC
,可以原子在服務器端運行多個命令,並經過EXEC
回報獲得這些命令的所有答覆。
在你的情況,val = val + 1
必須在客戶端運行,並且它不能在MULTI
命令的一部分。此外,在EXEC
返回之前,您無法獲得val = GET mykey
的回覆。所以你不能在SET mykey val
之前增加val
。
爲了實現自己的目標,即讓val = val + 1
在服務器端運行,您可以使用Lua scripting。 Lua腳本是MULTI
和EXEC
命令的替代品,它在服務器端以原子方式運行。實際上,它是a better solution to achieve transaction。