2011-10-09 60 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