我正在构建一个由Redis支持的PUB/SUB系统.
我有一个发布者和大量的订阅者.订户不可靠,他们可以随时丢失连接,并且需要能够从丢失的连接中"恢复".
有一拧不过,我想我的积压上限为一些数字,这意味着有故障的用户应该能够恢复仅达N个消息.
简单的解决方案是:
RPUSH list messagePUBLISH channel encoded如果消费者需要重新建立:
PSUBSCRIBE原子方式执行到目前为止,我们都很好.
我的一个大问题是,如果我希望积压清单上限为N项,该怎么办?
有什么方法可以保持不断增加的索引和列表中的封顶积压吗?
这个怎么样?要发布消息,请执行
LPUSH list message
LTRIM list 0 N
INCR global_index
PUBLISH channel global_index
Run Code Online (Sandbox Code Playgroud)
当通过pub/sub接收消息并在启动时,客户端需要将其最新索引(也可以保存在redis或其他地方)与global_index和读取min(global_index - my_index,N)消息进行比较赶上(基本上LRANGE list 0 (global_index - my_index)).