是否可以将 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:*
键上的每个 HSET
或 HMSET
调用编写事件前缀到 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 通道的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Data Redis 为过期键启用键空间通知
Redis键空间通知(Keyspace Notifications)
Redis实践操作之—— 直播视频定时控制TCP长连接框架(WorkerMan)+键空间通知的机制 ( Keyspace Notifications)+短信接口(API)