2012-07-10 32 views
1

我正試圖在redis上實現一個評分系統。我從來沒有經驗過。Redis獨特增量

什麼我的應用程序應該做的是增加值,僅當用戶尚未投票,所以我想的是這樣的:

INCR voteme 

,但只有當這是尚未已經增加,所以想要做到以下幾點:

SET voteme:voterip 1 

所以然後我會數的元素。問題是我認爲這在redis中是不可行的,必須考慮另一種方法。

任何想法?


EXTRA問題:

我想使這個數據持續寫入所產生的數(例如:24)到相應的用戶,在MongoDB中。一些僞代碼會有很大的幫助

回答

1

我不會存儲計數器,但直接包含所有已投票的用戶的集合。

讓我們假設一票組織用戶1.每次,用戶X投給用戶1,您可以執行:

SADD user:1:votes X 

票的用戶1的數量可以輕鬆地檢索:

SCARD user:1:votes 

現在,如果你需要保持這個數量在同步與另一家商店,你可以執行(假設仍然用戶X表決爲用戶1):

MULTI 
SADD users:1:votes X 
SCARD user:1:votes 
EXEC 

訣竅是SADD命令返回有效添加到集合中的項目數。如果該項目已經存在,它將返回0.因此,運行此多/ exec塊,檢查SADD的結果,獲取該集合的基數(票數),以及將該基數推送到另一個存儲只是在該組已被交易改變。

這樣,您可以使計數器保持最新狀態(實時),同時過濾無用的投票事件。