Redis に裏打ちされた PUB/SUB システムを構築しています。
私は 1 つのパブリッシャーと多数のサブスクライバーを持っています。サブスクライバーは信頼性が低く、いつでも接続を失う可能性があり、失われた接続から「回復」できる必要があります。
ひねりがありますが、バックログをいくつかの数に制限したいと思います。つまり、障害のあるサブスクライバーは最大 N 個のメッセージのみを回復できる必要があります。
簡単な解決策は次のとおりです。
- パブリッシャーがメッセージ X をパブリッシュする
- X はリストにプッシュされます
RPUSH list message
- メッセージは、リストにインデックスを含めるようにエンコードされます
- メッセージは消費者に発行されます (インデックスが埋め込まれています)
PUBLISH channel encoded
コンシューマーが再確立する必要がある場合:
- インデックスの後にリスト内のすべての値をredisに要求し、
PSUBSCRIBE
アトミックに実行します
ここまではみんな元気です。
私の大きな質問は、バックログ リストの上限を N 個にしたい場合はどうすればよいかということです。
増え続けるインデックスとキャップされたバックログをリストに保持する方法はありますか?