Публикация/подписка Redis: посмотрите, на какие каналы в данный момент подписаны

В настоящее время мне интересно посмотреть, на какие каналы подписаны мои публикации/подписки Redis. Когда клиент подключается к нашему серверу, мы регистрируем его в канале, который выглядит так:

user:user_id

Причина этого в том, что я хочу иметь возможность видеть, кто находится «в сети». В настоящее время я вслепую отправляю сообщения на канал, не зная, находится ли клиент в сети, поскольку получение им сообщений такого типа не критично.

Стремясь сделать свое приложение более интеллектуальным, я хотел бы иметь возможность определять, находится ли клиент в сети или не использует API публикации/подписки, и, если они не в сети, кэшировать их сообщения в отдельную очередь Redis, которая Я могу надавить на них, когда они вернутся в онлайн.

Это не обязательно должно быть на 100% точным, но чем оно точнее, тем лучше. Я предполагаю, что общий ключ не создается при подписке на канал, поэтому я не могу сделать что-то тривиальное, например:

redis-cli keys user*, чтобы найти всех онлайн-пользователей.

Другая стратегия, о которой я подумал, заключается в том, чтобы просто поддерживать свой собственный Redis Set всякий раз, когда пользователь публикует или удаляет себя из канала (что клиент автоматически обрабатывает, когда они подключаются к сети и закрывают приложение). Это будет дополнительным уровнем сложности, с которым мне нужно справиться, и я надеюсь, что есть более тривиальный подход к уже доступным данным.

12
задан randombits 8 June 2012 в 16:41
поделиться