Ich bin derzeit interessiert zu sehen, welche Kanäle in einer Redis Pub/Sub-Anwendung abonniert sind, die ich habe. Wenn ein Client auf unserem Server verbindet, wir registrieren sie zu einem Kanal, der wie folgt aussieht:Redis publish/subscribe: Sehen Sie, welche Kanäle derzeit abonniert sind
user:user_id
Der Grund dafür ist, ich will in der Lage sein zu sehen, wer „online“ ist. Derzeit fange ich blind Nachrichten an einen Kanal ab, ohne zu wissen, ob ein Client online ist, da es nicht kritisch ist, dass sie diese Art von Nachrichten erhalten.
Um meine Anwendung intelligenter zu machen, möchte ich herausfinden können, ob ein Client online ist oder nicht die Pub/Sub-API verwendet, und wenn sie offline sind, ihre Nachrichten in einer separaten Redis-Warteschlange zwischenspeichern was ich ihnen schicken kann, wenn sie wieder online sind.
Dies muss nicht 100% genau sein, aber je genauer es ist, desto besser. Ich nehme an, dass ein generischer Schlüssel nicht erstellt wird, wenn ein Kanal abonniert wird, also kann ich nichts so trivial wie:
redis-cli keys user*
tun, um alle Online-Benutzer zu finden. Die andere Strategie, an die ich gedacht habe, besteht darin, mein eigenes Redis-Set immer dann zu pflegen, wenn ein Benutzer sich selbst von einem Kanal veröffentlicht oder entfernt (was der Client automatisch behandelt, wenn er online springt und die App schließt). Das wäre eine zusätzliche Ebene der Komplexität, die ich verwalten muss, und ich hoffe, dass es einen trivialen Ansatz mit den Daten gibt, die bereits verfügbar sind.
Großer Vorschlag! Ich hatte gerade das gleiche Bedürfnis und habe es geschafft, es zu schreiben, indem ich "null" auf dem Kanal veröffentlichte, um die Anzahl der Abonnenten zu erhalten. Dann überprüfe ich im Listener, ob die Nachricht "None" ist und überspringe sie, falls dies der Fall ist. Prost Kumpel! –