Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Теги: #Redis
Рейтинг: 81% · 42 голосов
SQL и NoSQL: PostgreSQL, MySQL, Redis, MongoDB, ClickHouse, ElasticSearch — проектирование схем, индексы, репликация и оптимизация запросов.
Аватара пользователя
RedisNinja
Сообщения: 61
Зарегистрирован: 15 май 2026, 01:22

Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение RedisNinja »

Держим в одном Redis и сессии, и кэш горячих запросов. На пике память упёрлась в maxmemory, политика allkeys-lru — и Redis начал вышвыривать в том числе ключи сессий. Получили волну разлогинов и злой саппорт. Как правильно разруливать?
👍 ❤️ 🔥1 😄1 🤔
✔ Лучший ответ сформирован автоматически — royalt
Подкину альтернативу по кэшу: после разнесения сессий и кэша попробуйте на кэш-инстансе allkeys-lfu вместо lru. Для горячих запросов LFU точнее: разовый ночной обход кравлера не вымывает реально частые ключи, как это бывает с LRU. И по сессиям — скользящий TTL удобно делать не отдельным EXPIRE, а через SET ... KEEPTTL плюс продление только если осталось меньше половины срока, иначе на…
Перейти к ответу →
Аватара пользователя
radiomaker
Сообщения: 27
Зарегистрирован: 24 май 2026, 00:35

Re: Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение radiomaker »

Классическая ошибка: нельзя мешать сессии и кэш в одном инстансе с одной политикой. allkeys-lru вышибает что попало, включая твои сессии. Сессии должны жить там, где их не выселяют.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
mstrbates
Сообщения: 88
Зарегистрирован: 11 май 2026, 00:45

Re: Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение mstrbates »

Два варианта. Либо разнести на два инстанса/базы: кэш — allkeys-lru, сессии — отдельный с noeviction или volatile-lru. Либо ставить TTL только на кэш и юзать volatile-lru, тогда выселяются ТОЛЬКО ключи с TTL, а вечные сессии не трогаются.
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
Version
Сообщения: 68
Зарегистрирован: 11 май 2026, 03:17

Re: Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение Version »

О, про volatile-lru недопонимал. То есть если у сессий нет TTL, при volatile-lru их вообще не тронут? А если память кончится совсем?
👍 ❤️ 🔥2 😄 🤔
Аватара пользователя
gdgdgd
Сообщения: 77
Зарегистрирован: 11 май 2026, 03:27

Re: Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение gdgdgd »

Тогда volatile-lru начнёт возвращать OOM на запись, потому что выселять нечего. Поэтому в проде сессиям тоже ставят TTL (скользящий, продлевают на активность), а не делают вечными. Вечные ключи в Redis — это бомба замедленного действия.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
rage311
Сообщения: 8
Зарегистрирован: 14 май 2026, 03:27

Re: Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение rage311 »

Плюс мониторинг. Алерт на used_memory > 80% от maxmemory, и evicted_keys в графане. Если eviction вообще ненулевой на инстансе с сессиями — у тебя уже что-то горит, просто ты пока не заметил.
👍 ❤️ 🔥 😄1 🤔
Аватара пользователя
time4me
Сообщения: 3
Зарегистрирован: 12 май 2026, 00:35

Re: Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение time4me »

И не забудьте что fork при RGB-снапшоте может временно сожрать ещё кучу памяти (copy-on-write). Видел как раз из-за bgsave прод улетал в OOM хотя по графикам было 75%. Оставляйте запас, не упирайтесь в потолок впритык.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
marianna
Сообщения: 70
Зарегистрирован: 11 май 2026, 11:23

Re: Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение marianna »

Сделал: вынес сессии в отдельную базу с volatile-lru + скользящий TTL 30 мин, кэш оставил на allkeys-lru, накинул алерты на 80% и на evicted_keys. Спасибо, разлогины ушли.
👍3 ❤️1 🔥1 😄1 🤔
Аватара пользователя
royalt
Сообщения: 7
Зарегистрирован: 15 май 2026, 20:23

Re: Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение royalt »

✔ Лучший ответ — сформирован автоматически
Подкину альтернативу по кэшу: после разнесения сессий и кэша попробуйте на кэш-инстансе allkeys-lfu вместо lru. Для горячих запросов LFU точнее: разовый ночной обход кравлера не вымывает реально частые ключи, как это бывает с LRU. И по сессиям — скользящий TTL удобно делать не отдельным EXPIRE, а через SET ... KEEPTTL плюс продление только если осталось меньше половины срока, иначе на нагруженном API каждый запрос превращается в лишнюю запись.
👍2 ❤️2 🔥 😄 🤔1
Аватара пользователя
ollies
Сообщения: 33
Зарегистрирован: 11 май 2026, 16:28

Re: Redis на noeviction разлогинивает половину юзеров под нагрузкой. Что делаем не так?

Сообщение ollies »

@marianna, осторожно с формулировкой «отдельная база»: maxmemory и maxmemory-policy задаются на ВЕСЬ инстанс, на номер базы их повесить нельзя. Если вы сделали SELECT 1 на том же Redis, то политика у сессий и кэша по-прежнему общая, и при следующем пике разлогины вернутся. Разные политики — только отдельный процесс/контейнер со своим конфигом. Если у вас именно второй инстанс — тогда всё правильно, просто уточните.
👍2 ❤️1 🔥 😄1 🤔1
Ответить
Поделиться темой: ✈ Telegram VK
Похожие запросы: postgresql вместо redis для кэша стоит лиstrace почему программа висит и тормозитчем отличается deployment от pod в kubernetes простыми словамиrequests и limits в kubernetes как правильно задать ресурсы подуkubernetes pod crashloopbackoff почему падаетtarantool как база данных и кэш

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

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

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