Это больше вопрос архитектуры приложения / дизайна, чем вопроса программирования, поэтому в теории нет единственно правильного ответа.
Однако на практике Redis / Memcache и многие другие подобные реализации не предназначены для сохранения очень больших (или быстро растущих) наборов данных.
В качестве хранилища данных nosql Redis использует память вместе с зеркалом на жестком диске. Таким образом, хотя размер данных, которые вы можете хранить, не ограничен, в идеале он всегда должен быть меньше свободной памяти, которую вы планируете выделить для Redis.
Самое простое решение для охвата всех баз - хранить данные об активности пользователей в Redis по мере их создания. Используйте Redis для отображения уведомлений и т. Д. Сохраняйте запущенный cron, который усекает все журналы активности старше предварительно определенного количества дней (или предварительно определенного количества операций на пользователя) и сохраняет их в обычной базе данных.
Когда пользователь желает получить все уведомления, возможна некоторая потеря скорости (поскольку это не частое, обязательное или повышенное действие), и вы можете извлечь их из базы данных, минуя Redis.
Альтернатива:
Опять же, решение для использования лучше всего выбрать на основе фактических номеров вашего приложения. Но вы могли бы сделать это:
- Хранить все действия в базе данных
- Для любого пользователя, вошедшего в систему, извлекайте и сохраняйте все действия в Redis
- При выходе удалить действия / уведомления этого пользователя из Redis
- При добавлении действия требуется дополнительная логика, чтобы проверить, подключены ли затронутые пользователи к сети. В обоих случаях вам нужно добавить действие в базу данных, но если затронутый пользователь подключен к сети, добавьте его в свой хеш в Redis.