问题描述
使用Redis,很熟悉。现在,我面临的情况是,普通的 PUBSUB 机制并不是处理某些情况的好方法。
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,也许这可以解决您的问题。