我在我的应用程序中实现了redis Keyspace通知,该应用程序在我们的生产环境中有10个实例。
我的pubsub监听map1中的过期事件,并基于此在map2中进行递减。
这在我的本地机器上运行得很好。我的问题是,当我使用多个实例部署我的应用程序时,我认为所有实例都将读取过期事件,并且所有实例都将递减密钥,而我希望限制只有1个实例应该递减。
有什么方法可以做到这一点吗?
发布于 2018-02-20 01:37:43
你的听众将不得不以某种方式协调递减。您可以使用某种类型的锁定来做到这一点,但更简单的方法可能是将版本/时间戳的概念嵌入到此逻辑中。这就是我的想法。
如果你在你的"map2“中包含一个时间戳呢?一个过期的事件有它自己的时间戳,所以你可以让监听器对其进行检查和设置(提示:对于CAS,我会使用Lua )。这将防止类似比赛的条件和多次减少一次进行。
注意: Redis PubSub很棒,但请注意,您当前的解决方案不能确保在消息丢失的情况下“Redis”中的减量。在不久的将来,Redis将提供流数据类型,它更适合于这种类型的工作。具体地说,Stream Consumer Groups的功能正是您在这里需要用来替换键空间通知的地方。
https://stackoverflow.com/questions/48868570
复制相似问题