Можно ли хранить непрочитанные приватные Laravel echo события в redis и доставлять их если пользователь вошёл в канал?
Имеется система личной переписки на websocket (Laravel echo + redis).
При авторизации на сайте пользователь подписывается на приватный канал laravel-echo с id равным id пользователя.
Сообщения (события) в другие каналы сохраняются в бд и доставляются вне зависимости от того присутствует ли человек на данный момент в том канале или нет. (Узнать о присутствии человека в канале можно только если вы состоите в одном канале, а у нас же у каждого пользователя свой канал с id равным id пользователя).
Как реализовать систему прочитанных/непрочитанных событий? Каждый раз отправлять в бд запрос о том что сообщение прочитано нерационально.
Можно ли как-то хранить в redis Laravel-echo события, доставлять непрочитанные пользователю при его авторизации на сайте и очищать их после авторизации пользователя?
Просто проблема заключается не в выводе уведомлений, а в реализации системы прочитано/непрочитано. Если просто к каждому сообщению добавить поле прочитано/непрочитано и каждый раз отправлять в бд запрос о том что сообщение прочитано - это же положит бд, верно? Идея была в том чтобы при отправке события через redis сохранять его в кэшэ redis с id пользователя (если пользователь которому адресовано сообщения не онлайн) и далее, когда пользователь которому были отправлены сообщения заходит на сайт, отправляется один запрос к редис серверу и ему отображаются все непрочитанные уведомления, а сами уведомления стираются из кэша.
ну во-первых зависит от объёмов, во вторых смотря как сделать.
Можно через тот же вебсокет отправлять и как минимум не грузить php скриптами сервер для отметки прочитано.
А если прям много трафика и запросов, то надо смотреть по ситуации, там уже нужен опыт чтоб разрулить всё это правильно. Надо ОЧЕНЬ много запросов в секунду чтоб базу положить даже на самой простой впске.
Редис как бы не резиновый и не для постоянно хранения в данном контексте, хотя он конечно может хранить вечно", если количество рамы позволит + включен бекап на диск.
А так вариант с оповещениями встроенными вполне нормальный и закрывает все мыслимые сценарии.
В любом случае что-то похожее будет на выходе только собранное на коленке, и не факт что оно будет меньше нагрузки делать.