Redis Pub Sub - 只有一个订阅者对过期事件采取行动

标签 redis

我正在我的应用程序中实现 redis Keyspace 通知,该应用程序在我们的生产环境中有 10 个实例。

我的 pubsub 监听 map1 中的过期事件并基于该事件在 map2 中递减。

这在我的本地机器上运行良好。我的问题是,当我使用多个实例部署我的应用程序时,我认为所有实例都会读取过期事件并且所有实例都会递减 key ,而我想限制只有 1 个实例应该递减。

有什么办法可以实现吗?

最佳答案

您的听众将不得不以某种方式协调减量。您可以通过某种锁定来做到这一点,但更简单的方法可能是将版本/时间戳的概念嵌入到此逻辑中。这就是我的想法。

如果您在“map2”中包含时间戳怎么办?过期事件有它自己的时间戳,因此您可以让监听器针对它进行检查和设置(提示:我会使用 Lua 作为 CAS)。这将防止类似竞争的情况和一次性多次递减。

注意:Redis PubSub 非常棒,但请注意,您当前的解决方案无法确保“map2”中的递减,以防消息丢失。在不久的将来,Redis 将提供更适合此类工作的 Stream 数据类型。具体来说,Stream Consumer Groups 功能正是您在此处替换键空间通知所需的 IMO。

关于Redis Pub Sub - 只有一个订阅者对过期事件采取行动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48868570/

相关文章:

redis - 将 Jedis 与 Spring Data @RedisHash 注释一起使用时,为什么数据在 Redis 中以 SET 类型存储?

database - 存储频繁请求的具有关系的键值数据的有效方法?

spring-boot - 如何记录/跟踪来自 java spring 应用程序的 redis 调用

node.js - 在 php 和 Node 之间共享 session

php - 在我的 php 应用程序中使用 Redis、Predis

linux - linux中redis进程的两个实例

azure - Redis 错误爆发

node.js - 在 nodejs 中使用 redis 的最佳实践是什么?

asp.net-mvc-2 - MemCached vs Redis for ASP.NET 和 Entity Framework ?

c# - 如何在Redis缓存中存储列表元素