サブスクライバー(消費者)が死亡すると、クライアントが戻るまでリストは増え続けます。プロデューサーは、特定の制限に達したら(どちらの側からでも)リストをトリミングできますが、それはアプリケーションレベルで処理する必要があるものです。各メッセージにタイムスタンプを含めると、メッセージの経過時間に適用するアプリケーションロジックがあると仮定して、コンシューマーはメッセージの経過時間に基づいて行動できます。
Redisへの接続は通常TCPであり、整合性が保証されているため、不正な形式のメッセージがシステムにどのように入力されるかはわかりません。ただし、これが発生した場合、おそらくプロデューサーレイヤーでのメッセージエンコーディングのバグが原因で、コンシューマーの例外メッセージを受信したプロデューサーごとのキューを保持することで、エラーを処理するための一般的なメカニズムを提供できます。
再試行ポリシーは、アプリケーションのニーズに大きく依存します。メッセージが受信されて処理されたことを100%保証する必要がある場合は、Redisトランザクション(MULTI / EXEC)を使用して、コンシューマーによって行われた作業をラップすることを検討する必要があります。これにより、クライアントがメッセージを削除しないようにすることができます。それはその仕事を完了しました。明示的な確認が必要な場合は、プロデューサープロセス専用のキューで明示的なACKメッセージを使用できます。
アプリケーションのニーズについて詳しく知らなければ、賢明な選択方法を知ることは困難です。一般に、メッセージで完全なACID保護が必要な場合は、おそらくredisトランザクションも使用する必要があります。メッセージがタイムリーな場合にのみ意味がある場合は、トランザクションは必要ない可能性があります。ドロップされたメッセージを許容できないように聞こえるので、リストを使用するアプローチは適切です。メッセージの優先度キューを実装する必要がある場合は、ソートされたセット(Zコマンド)を使用して、メッセージの優先度をスコア値として使用し、ポーリングコンシューマーとともにメッセージを保存できます。