Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每“一次”递减一个Redis计数器;x";秒_Redis_Distributed Computing - Fatal编程技术网

每“一次”递减一个Redis计数器;x";秒

每“一次”递减一个Redis计数器;x";秒,redis,distributed-computing,Redis,Distributed Computing,我有一个用例,我需要每“x”秒减少一个redis。在Redis中有这样做的方法吗?Redis有“aeCreateTimeEvent”,但它是否向客户端公开 如果我们从Redis外部执行此操作,我们需要一种可靠的方法来调用代码以减少Redis中存储的计数器 所谓可靠,我的意思是:托管“每x秒递减一次”程序的节点的故障不应导致此设置的失败 也就是说,可能有一个分布式程序来减少工作量,这听起来像是一项艰巨的工作。因此,最好在Redis中内置一些东西。否,aeCreateTimeEvent,因为所有简单

我有一个用例,我需要每“x”秒减少一个redis。在Redis中有这样做的方法吗?Redis有“aeCreateTimeEvent”,但它是否向客户端公开

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

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


也就是说,可能有一个分布式程序来减少工作量,这听起来像是一项艰巨的工作。因此,最好在Redis中内置一些东西。

否,
aeCreateTimeEvent
,因为所有简单事件库(如
AE_H
中所述)都只在Redis内部使用。但是,通过一些小的Redis服务器补丁,这真的没有什么难做的

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

  • 使用
    redic.s
    中的
    serverCron
    功能,通过
    run\u with\u period
    宏,使用自定义代码添加新条目
  • 将需要递减的键添加到一些特殊列表中
  • 在自定义函数中迭代此键
  • 我认为这对于Redis服务器来说可能是一个非常酷的想法——添加自定义LUA脚本到Redis cron管道的能力。这允许将Redis转变为某种LUA应用服务器

    如果一致性很重要
  • 将上次更新时间与上次减量时间相加
  • 每次递减时更新上次更新
  • 检查上次更新的值以确定递减步长:(当前时间-上次更新)mod X*递减步长
  • 这允许您在服务器崩溃时恢复正确的递减值