我正在构建一个由Redis支持的PUB / SUB系统。
我有一个发布商和大量订阅者。订户不可靠,他们可以随时丢失连接,并且需要能够从丢失的连接中“恢复”。
虽然有一个转折,我希望我的积压上限为某个数字,这意味着错误的订阅者应该能够仅恢复最多N个消息。
简单的解决方案是:
RPUSH list message
PUBLISH channel encoded
如果消费者需要重新建立:
PSUBSCRIBE
到此为止,我们都很好。
我的一个大问题是,如果我希望积压清单上限为N项,该怎么办?
有没有什么方法可以保持不断增加的索引和列表中的上限积压?
答案 0 :(得分:6)
这个怎么样?要发布消息,请执行
LPUSH list message
LTRIM list 0 N
INCR global_index
PUBLISH channel global_index
当通过pub / sub接收消息并且启动时,客户端需要使用global_index和read min(global_index - my_index,N)消息比较他们的最新索引(这也可以保存在redis或其他地方)从列表中赶上(基本上LRANGE list 0 (global_index - my_index)
)。