2011-10-09 82 views
7

我將在Redis中存儲多個URL的計數器。我打算使用hash,因爲這似乎是有道理的。它還具有對我的用例至關重要的原子增量函數。Redis中的哈希上的原子GETSET

每隔一段時間,我都會將每個URL的點擊次數聚合到另一個數據存儲區。爲此,我想獲得命中計數並將其重置爲零。我似乎無法找到像GETSET這樣的在哈希上運行的操作。如果我在獲得命中計數和將其重置爲零之間記錄一次命中,它將在沒有某種原子操作的情況下丟失。

我錯過了什麼嗎?我想到的一種替代方法是在我的客戶端(python)代碼中散列URL並使用string commands,但是當Redis本身提供散列時,這看起來有點破綻。

回答

6

嘗試看看redis的transactions文檔,即中WATCHMULTI命令組合:

看着鍵,以便檢測對他們的變化進行監測。如果 在EXEC命令之前至少修改了一個觀看密鑰,則整個事務中止,並且EXEC返回空的多批量回復,通知 通知事務失敗。

...

那麼WATCH真的是什麼? 這是一個使EXEC有條件的命令:我們要求 只有在沒有其他客戶端修改WATCHed密鑰的任何 時,Redis才執行該事務。否則,交易完全不會被輸入。

+1

你能提供一個這個迴應的代碼示例嗎? – Eric