我正在我的应用程序中实现redis Keyspace通知,该通知在我们的生产环境中有10个实例。
我的pubsub在map1中侦听过期事件,在map2中逐渐减少。
这在我的本地计算机上运行正常。我的问题是,当我使用多个实例部署我的应用程序时,我认为所有实例都将读取过期事件,并且所有实例都将减少密钥,而我想限制只有1个实例应该减少。
有没有办法实现这个目标?
答案 0 :(得分:0)
你的听众必须以某种方式协调减量。您可以通过某种锁定来实现,但更简单的方法可能是将版本/时间戳的概念嵌入到此逻辑中。这就是我的想法。
如果您在" map2"中添加了时间戳,该怎么办?过期事件具有自己的时间戳,因此您可以让侦听器对其进行检查和设置(提示:我将Lua用于CAS)。这将一次性防止类似种族的情况和多次减少。
注意:Redis PubSub非常棒,但请注意,您当前的解决方案无法确保" map2"万一邮件丢失。在不久的将来,Redis将提供Stream数据类型,更适合该类型的工作。具体来说,流消费者组功能就像IMO一样,可以替代密钥空间通知。