2017-05-29 44 views
0

因爲我想在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

感謝,

回答

0

NO,則無法做到這一點。

隨着MULTIEXEC,可以原子在服務器端運行多個命令,並經過EXEC回報獲得這些命令的所有答覆。

在你的情況,val = val + 1必須在客戶端運行,並且它不能在MULTI命令的一部分。此外,在EXEC返回之前,您無法獲得val = GET mykey的回覆。所以你不能在SET mykey val之前增加val

爲了實現自己的目標,即讓val = val + 1服務器端運行,您可以使用Lua scripting。 Lua腳本是MULTIEXEC命令的替代品,它在服務器端以原子方式運行。實際上,它是a better solution to achieve transaction