私は現在、Redis pub/sub アプリケーションでどのチャネルがサブスクライブされているかを知りたいと思っています。クライアントがサーバーに接続すると、次のようなチャネルにクライアントを登録します。
user:user_id
その理由は、誰が「オンライン」であるかを確認できるようにしたいからです。クライアントがこれらのタイプのメッセージを受信することは重要ではないため、現在、クライアントがオンラインであるかどうかを知らずに、やみくもにチャネルにメッセージを送信しています。
アプリケーションをよりスマートにするために、クライアントがオンラインか、pub/sub API を使用していないかを検出できるようにしたいと考えています。クライアントがオフラインの場合は、プッシュできる別の redis キューにメッセージをキャッシュします。彼らがオンラインに戻ったときに彼らに。
これは 100% 正確である必要はありませんが、正確であればあるほど良いでしょう。チャンネルがサブスクライブされたときに汎用キーが作成されないと想定しているため、次のような簡単なことはできません。
redis-cli keys user*
すべてのオンライン ユーザーを検索します。
私が考えたもう 1 つの戦略は、ユーザーがチャネルを公開またはチャネルから削除するたびに、独自の Redis セットを維持することです (これは、ユーザーがオンラインに飛び乗ってアプリを閉じると、クライアントが自動的に処理します)。それは私が管理しなければならない追加の複雑さのレイヤーであり、すでに利用可能なデータを使ったより簡単なアプローチがあることを願っています。