Redis中哈希的原子GETSET
Posted
技术标签:
【中文标题】Redis中哈希的原子GETSET【英文标题】:Atomic GETSET on a hash in Redis 【发布时间】:2011-10-09 09:23:48 【问题描述】:我将在 Redis 中存储多个 URL 的命中计数器。我打算使用hash,因为这似乎很有意义。它还有一个原子增量函数,这对我的用例至关重要。
每隔一段时间,我都会将每个 URL 的点击计数汇总到另一个数据存储中。为此,我想获取命中计数并将其重置为零。我似乎找不到像 GETSET 这样的操作来处理哈希。如果我在获取命中计数和将其重置为零之间记录一次命中,那么如果没有某种原子操作,它就会丢失。
我错过了什么吗?我想到的一种替代方法是在我的客户端 (python) 代码中对 URL 进行哈希处理并使用 string commands,但是当 Redis 本身提供哈希时,这似乎有点不妥。
【问题讨论】:
【参考方案1】:尝试查看redis transactions docs,即WATCH和MULTI命令的组合:
监视 WATCHed 键以检测针对它们的更改。如果 在 EXEC 命令之前至少修改了一个被监视的键, 整个事务中止,并且 EXEC 返回 Null 多批量回复 通知事务失败。
...
那么,WATCH 的真正含义是什么? 这是一个使 EXEC 有条件的命令:我们在问 Redis 仅在没有其他客户端修改任何内容时才执行事务 WATCHed 键。否则根本不进入交易。
【讨论】:
不幸的是,它锁定了整个哈希而不是单个条目。看起来您无法在哈希中查看单个条目。以上是关于Redis中哈希的原子GETSET的主要内容,如果未能解决你的问题,请参考以下文章