Redis как правильно использовать как кэш и не потерять данные

Рейтинг: 70.3% · 39 голосов
SQL и NoSQL: PostgreSQL, MySQL, Redis, MongoDB, ClickHouse, ElasticSearch — проектирование схем, индексы, репликация и оптимизация запросов.
Ответить
Аватара пользователя
rustguru
Сообщения: 7
Зарегистрирован: 13 май 2026, 10:16

Redis как правильно использовать как кэш и не потерять данные

Сообщение rustguru »

Используем Redis 7 как кэш сессий и горячих данных. Недавно упал один из серверов и мы потеряли все сессии — пользователей повыкидывало. Как настроить Redis так, чтобы при падении одного узла данные не терялись? И вообще стоит ли включать AOF если Redis используется только как кэш?
👍 ❤️ 🔥 😄 🤔1
✔ Лучший ответ сформирован автоматически — boblee
Развёрнуто по архитектуре: если это production и сессии критичны — минимальная схема это 1 master + 1 replica + 3 Sentinel-процесса (можно на тех же хостах). В redis.conf на мастере: replica-lazy-flush yes, на репликах: replica-read-only yes. Сентинели настраиваются через sentinel.conf с параметрами sentinel monitor mymaster 2 (кворум 2 из 3). Приложение подключается к Sentinel…
Перейти к ответу →
Аватара пользователя
Bowden
Сообщения: 80
Зарегистрирован: 12 май 2026, 09:21

Re: Redis как правильно использовать как кэш и не потерять данные

Сообщение Bowden »

Для кэша сессий потеря данных при падении — это вообще-то ожидаемое поведение Redis в базовой конфигурации. Вопрос в том, что именно вы хотите: отказоустойчивость (данные не теряются) или высокую доступность (сервис работает даже при падении узла). Это разные задачи.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
rawgoblin
Сообщения: 39
Зарегистрирован: 13 май 2026, 07:42

Re: Redis как правильно использовать как кэш и не потерять данные

Сообщение rawgoblin »

Для высокой доступности без потери данных нужен Redis Sentinel или Redis Cluster. Sentinel мониторит мастер, при падении промоутирует реплику в мастер — приложение переподключается и работает дальше. Replica lag при этом может привести к потере последних записей (зависит от настройки min-replicas-to-write), но большинство данных сохранится.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
wireguardmaker
Сообщения: 12
Зарегистрирован: 19 май 2026, 08:10

Re: Redis как правильно использовать как кэш и не потерять данные

Сообщение wireguardmaker »

AOF для кэша — спорно. AOF с fsync=always убьёт производительность (в разы), fsync=everysec даст потерю максимум 1 секунды данных при краше ОС, но замедлит запись. Для сессий я бы сделал Sentinel + RDB снапшоты каждые 5 минут — этого обычно достаточно, и производительность не страдает.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
boblee
Сообщения: 42
Зарегистрирован: 11 май 2026, 11:59

Re: Redis как правильно использовать как кэш и не потерять данные

Сообщение boblee »

✔ Лучший ответ — сформирован автоматически
Развёрнуто по архитектуре: если это production и сессии критичны — минимальная схема это 1 master + 1 replica + 3 Sentinel-процесса (можно на тех же хостах). В redis.conf на мастере: replica-lazy-flush yes, на репликах: replica-read-only yes. Сентинели настраиваются через sentinel.conf с параметрами sentinel monitor mymaster <ip> <port> 2 (кворум 2 из 3). Приложение подключается к Sentinel, получает от него адрес актуального мастера. При падении мастера Sentinel через ~30 секунд (настраивается через sentinel down-after-milliseconds) промоутирует реплику. Если хотите Redis Cluster — это сложнее в настройке, но даёт горизонтальное масштабирование и автоматический шардинг. Для просто отказоустойчивости Sentinel проще.
👍1 ❤️ 🔥1 😄 🤔1
Аватара пользователя
Thebossman
Сообщения: 8
Зарегистрирован: 30 май 2026, 14:24

Re: Redis как правильно использовать как кэш и не потерять данные

Сообщение Thebossman »

Ещё момент: убедитесь что у сессий стоит TTL. Без TTL при падении и поднятии replica как новый master у вас постепенно накопится мусор. SET session:xxx данные EX 3600 — и не забивайте голову.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
k8s2000
Сообщения: 85
Зарегистрирован: 11 май 2026, 00:27

Re: Redis как правильно использовать как кэш и не потерять данные

Сообщение k8s2000 »

У нас похожая история была. В итоге вынесли сессии в отдельный Redis с AOF everysec + Sentinel, а основной кэш оставили без персистентности вообще. Логика: если кэш упал — прогреем заново, это больно но не катастрофа. Если сессии упали — пользователи злятся. Разные данные — разные требования к надёжности.
👍 ❤️2 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK
Похожие запросы: postgresql вместо redis для кэша стоит ликак сделать бэкап docker volume и восстановить данныеtarantool как база данных и кэшmulti-stage сборка docker как уменьшить образ и почистить кэшdocker volume и bind mount в чем разница и где хранятся данные

Вернуться в «Базы данных»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость