是否可以将 redis 键空间通知推送到 redis 流而不是 pub/sub 通道

Posted

技术标签:

【中文标题】是否可以将 redis 键空间通知推送到 redis 流而不是 pub/sub 通道【英文标题】:Can redis key space notifications be pushed to the redis stream instead of pub/sub channel 【发布时间】:2019-01-10 10:59:31 【问题描述】:

我们有一个要求,即我们需要收到有关 Redis 数据结构更改的通知。根据我的研究,我发现我可以使用 Redis 密钥空间通知来做同样的事情。但是,Redis 密钥空间通知将事件发送到 Redis 发布/订阅通道,该通道会触发并忘记,即一旦客户端失去连接,所有事件都会丢失,直到连接再次启动。

Redis 流解决了这个问题。我还想使用 Redis 流的消费者组功能。那么有什么方法可以将 Redis 键空间通知推送到 Redis 流而不是 Redis 发布/订阅通道?

【问题讨论】:

【参考方案1】:

使用当前的 Redis v5.0.3 可以做到这一点的唯一方法是使用 Modules API 开发一个模块来注册键空间通知、处理它们并将相关消息添加到 Stream 中。

【讨论】:

非常感谢 Itamar 提供的信息。只需要确认。 当然 - 如果您想讨论 Redis、模块开发或任何事情,请随时在 redislabs dot com 的 itamar 与我联系;)【参考方案2】:

使用RedisGears,注册一个监听器非常简单,它会自动将每个事件写入流。

例如以下 register.py 脚本将为 person:* 键上的每个 HSETHMSET 调用编写事件前缀到 mystream 流。

注册.py:

GearsBuilder() \
.foreach(lambda x: execute('XADD', "mystream", '*', *sum([[k,v] for k,v in x.items()],[]))) \
.register(prefix="person:*", eventTypes=['HSET', 'HMSET'])

要运行它,您只需调用:

$ gears-cli run register.py

【讨论】:

查看oss.redislabs.com/redisgears/master/… 获取源代码,也可查看oss.redislabs.com/redisgears/master/… 集群安全

以上是关于是否可以将 redis 键空间通知推送到 redis 流而不是 pub/sub 通道的主要内容,如果未能解决你的问题,请参考以下文章

redis中键空间通知

如何使用 Spring Data Redis 为过期键启用键空间通知

Redis键空间通知(Keyspace Notifications)

Redis实践操作之—— 直播视频定时控制TCP长连接框架(WorkerMan)+键空间通知的机制 ( Keyspace Notifications)+短信接口(API)

Redis键通知机制

通过redis键空间通知实现日程的提醒通知