Проблемы с системой уведомлений на основе Redis - PullRequest
1 голос
/ 10 ноября 2011

На основании ответов на на этот вопрос мне удалось создать поток уведомлений, используя Redis для моего сайта. Каждое «действие» в веб-клиенте «записывается» для каждого пользователя, для которого это будет интересно (подписчик, посткомментатор и т. Д.). Ожидающие уведомления загружаются каждые несколько секунд с использованием опроса.

Из-за начальных требований я заставил свою серверную инфраструктуру удалять уведомления после их получения (важно, чтобы Redis работал быстро и имел низкое потребление памяти)

Проблема возникает именно тогда, когда я открываю более одного клиента на одном компьютере. Только первое будет отображать уведомление, потому что оно впоследствии выскочило из redis.

Я подумал о нескольких решениях, но пока единственное разумное, которое у меня есть, заключается в следующем: вместо удаления уведомления я просто установил его срок действия через несколько часов. Конечно, это не поможет решить проблему с сервером, отправляющим мне одно и то же уведомление снова и снова (поскольку оно не удаляется), если только я не придумаю идентификаторы на основе клиента или sth, но это уже усложняет ситуацию .

Любая простая альтернатива?

1 Ответ

1 голос
/ 24 декабря 2011

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

Тогда каждый из веб-клиентов может поддерживать порядковый номер идентификатора для уже имеющихся уведомлений. Таким образом, в каждом опросе вы просто проверяете, есть ли у вас новое уведомление, основанное на изменении идентификатора последовательности. Кроме того, вместо использования ключей истечения срока действия вы можете использовать упорядоченный набор и сохранять уведомления в наборе, затем вы можете захватить все нужные вам уведомления на основе идентификатора последовательности и просто очищать содержимое от заданного времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...