2014-11-06 95 views
1

在我的業務應用程序中,我計劃將用戶餘額存儲在Redis緩存服務器中,允許多個進程消耗餘額。但是一旦金額下降到0,我希望這些流程「失敗」消耗餘額。Redis是否有decr功能

截至目前,我無法做到這一點。例如,讓我們說餘額是1 INR或$,並且2個線程中的每一個都想要使用它。每個線程都得到並且decr。所以有時會發生數值低於0的情況,因爲沒有像「DECR IF」這樣的類似於「比較和設置」的原子操作。

是否有可能以任何其他方式實現此目的?

回答

1

雖然在Redis中沒有單個命令來執行此操作,但您可以使用它的transactionsWATCH命令來達到此目的。從樂觀鎖定使用以下僞檢查和設置款基本上是回答你的問題:

WATCH mykey 
val = GET mykey 
val = val + 1 
MULTI 
SET mykey $val 
EXEC