【问题标题】:Atomic GETSET on a hash in RedisRedis中哈希的原子GETSET
【发布时间】:2011-10-09 09:23:48
【问题描述】:

我将在 Redis 中存储多个 URL 的命中计数器。我打算使用hash,因为这似乎很有意义。它还有一个原子增量函数,这对我的用例至关重要。

每隔一段时间,我都会将每个 URL 的点击计数汇总到另一个数据存储中。为此,我想获取命中计数并将其重置为零。我似乎找不到像 GETSET 这样的操作来处理哈希。如果我在获取命中计数和将其重置为零之间记录一次命中,那么如果没有某种原子操作,它就会丢失。

我错过了什么吗?我想到的一种替代方法是在我的客户端 (python) 代码中对 URL 进行哈希处理并使用 string commands,但是当 Redis 本身提供哈希时,这似乎有点不妥。

【问题讨论】:

    标签: hash redis atomic


    【解决方案1】:

    尝试查看redis transactions docs,即WATCHMULTI命令的组合:

    监视 WATCHed 键以检测针对它们的更改。如果 在 EXEC 命令之前至少修改了一个被监视的键​​, 整个事务中止,并且 EXEC 返回 Null 多批量回复 通知事务失败。

    ...

    那么,WATCH 的真正含义是什么? 这是一个使 EXEC 有条件的命令:我们在问 Redis 仅在没有其他客户端修改任何内容时才执行事务 WATCHed 键。否则根本不进入交易。

    【讨论】:

    • 不幸的是,它锁定了整个哈希而不是单个条目。看起来您无法在哈希中查看单个条目。
    猜你喜欢
    • 2016-06-13
    • 2012-07-02
    • 1970-01-01
    • 2016-02-06
    • 2021-07-01
    • 2014-12-12
    • 2012-11-13
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多