Redis,监听pubsub事件并将其转为流,以实现更可靠的消费

问题描述

使用Redis,很熟悉。现在,我面临的情况是,普通的 PUBSUB 机制并不是处理某些情况的好方法

一个哈希,我们说使用 HSET 存储对另一个哈希的引用。

HSET "davids.trips" "trip1" "Stockholm"
HSET "davids.trips" "trip2" "London"

HSET "david" "age"   "12"
HSET "david" "trips" "davids.trips"       # Reference to the prevIoUs hash

现在,最后一个内部已知并作为引用哈希处理。

然而,我们现在面临的问题是,当 expire 现在出现在地图 "david" 上时,我们也希望能够使 davids.trips 失效,因此它不会徘徊。

现在,我们可以在 HSET "david" 上发布订阅过期,但如果我们的服务器停机,那么我们将无法接收它,它会在我们身上丢失。

从 Java 执行此操作,我们可能会丢失过期的发布订阅消息。

相反,如果我们通过 stream 接收消息,则消息必须至少被一个人使用,我们可以确保它被清除。

现在,我们该怎么做?

我们可以轻松地将发布订阅消息转换为类似流的行为吗?

如果是这样,怎么办?我正在使用 Jedis,但我可以发送一些代码来执行此操作。理想情况下,转换将在 Redis 服务器内进行,以便发布订阅消息永远不会转换为 Streams。

顺便说一句:https://redis.io/topics/pubsub 我们可以找到: “请注意,一旦进入订阅模式,redis-cli 将不接受任何命令,只能使用 Ctrl-C 退出该模式。” 所以问题是,如果我们要在 Redis订阅,它会变得阻塞然后尝试消费并将它们转化为流。

必须有一种方法可以使用 lua 和 pubsub 创建线程吗?

解决方法

Redis 7.0 将带来key space notifications with stream,也许这可以解决您的问题。