Задать вопрос

Как правильно использовать redis?

Я только приступил к изучению технологии redis. Я понял, как она работает, но я так и не нашёл чёткую инструкцию по применению. Помогите понять сам принцип.
Моделируем ситуацию. Создаётся мессенджер. Для быстрой работы с данными используется redis, для долгого хранения любая реляционная база данных (тут это не важно). Пользователи могут добавлять, удалять и изменять сообщение. Пользователь может отправить сообщение только в те чаты, в которых является членом. Сейчас я предложу, скорее всего, неправильное использование redis и ожидаю, что вы поправите меня.
С самого начала работы (в функции init или main) я инициализирую обе базы данных. При отправке сообщения я сначала делаю запрос к redis и спрашиваю чаты пользователя, если их там нет, я делаю запрос к реляционной базе данных и забираю чаты пользователя оттуда и помещаю их в кеш. Дальше я записываю его сообщение в redis, если он состоит в этом чате.
При попытке изменить сообщение, я сначала отправляю запрос в redis и повторяю процедуру по получению чатов пользователя. Дальше я меняю сообщение в redis, если оно там, иначе — в реляционной базе данных.
При попытке удалить сообщение, я снова повторяю процедуру получения чатов пользователя и дальше удаляю это сообщение из redis если оно там, иначе — из реляционной базы данных.
Я отслеживаю количество сообщений и чатов в redis, при переполнении я вставляю все сообщения в реляционную базу данных и очищаю кеш.
Так же я очищаю кеш и заполняю реляционную базу данных каждые 8 часов.
Что в этой схеме надо поменять?
  • Вопрос задан
  • 238 просмотров
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Что в этой схеме надо поменять?
выкинуть редис?

Обычно редис используют для кеширования. В редисе есть смысл хранить холодные данные, выборка по которым занимает много времени/ресурсов, а изменения наступают достаточно редко. Хороший пример - лента новостей, данные выбранные в ленту актуальны примерно 5 минут, что позволяет делать запросы в бд 1 раз в 5 минут, а не 50 раз в секунду.

В случае чата данные достаточно горячие, и смысл хранить их в редис пропадает, кроме того, обычно чат менее нагружен, так как общаться будут "не только лишь все, но только немногие" из пользователей. Выборка из таблиц чатов будет менее объемной и более быстрой, по этому особого смысла в кешировании нет, так как важно держать данные актуальными.

А, ну и еще, при сбое сервера все данные в редисе будут потеряны, по этому там можно держать только данные полученные из бд или другого источника постоянного хранения.
Ответ написан
h4r7w3l1
@h4r7w3l1
С этим должны были ознакомиться
https://redis.io/docs/stack/use-cases/

А до сюда скорее всего не дошли:
https://launchpad.redis.com/
С десктопа смотрите.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы