【问题标题】:Decrement a Redis counter every "x" seconds每“x”秒递减一个 Redis 计数器
【发布时间】:2016-01-14 18:02:30
【问题描述】:

我有一个用例,我需要每“x”秒递减一个 redis。有没有办法在 Redis 中做到这一点? Redis有“aeCreateTimeEvent”,但是它暴露给客户端了吗?

如果我们从 Redis 外部执行此操作,我们需要一种可靠的方法来调用代码以减少存储在 Redis 中的计数器。

可靠,我的意思是:托管“每“x”秒递减“程序的节点失败,不应导致此设置失败。

也就是说,可能有一个分布式程序来减少听起来像是很多工作。所以最好在 Redis 中内置一些东西。

【问题讨论】:

    标签: redis distributed-computing


    【解决方案1】:

    不,aeCreateTimeEvent 作为仅在 Redis 内部使用的所有简单事件库(在AE_H 中描述)。但是,通过一些小型 Redis 服务器修补来做到这一点并不难。

    我们用这种方式来解决类似的问题:

    1. redic.s 修补serverCron 函数,以使用带有run_with_period 宏的自定义代码添加新条目。
    2. 将需要减少的键添加到一些特殊列表中。
    3. 在您的自定义函数中迭代此键。

    我认为这对于 Redis 服务器来说可能是一个非常酷的想法 - 添加将自定义 LUA 脚本添加到 Redis cron 管道的功能。这允许将 Redis 转换为某种 LUA 应用程序服务器。

    如果一致性很重要

    1. 添加last update 时间与您最后一次减量。
    2. 每次递减时更新last update
    3. 检查last update 的值以确定递减步骤:(current_time - last_update) mod X * decrement_step。

    这允许您在服务器崩溃时恢复正确的递减值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2012-07-11
      • 2019-03-11
      • 1970-01-01
      相关资源
      最近更新 更多