Убрали Redis из стека и положили кэш в PostgreSQL — кто так делал?

Рейтинг: 51% · 4 голосов
SQL и NoSQL: PostgreSQL, MySQL, Redis, MongoDB, ClickHouse, ElasticSearch — проектирование схем, индексы, репликация и оптимизация запросов.
Ответить
Аватара пользователя
Version
Сообщения: 68
Зарегистрирован: 11 май 2026, 03:17

Убрали Redis из стека и положили кэш в PostgreSQL — кто так делал?

Сообщение Version »

Читал несколько статей про то что в 2026 году Redis для кэширования уже не так нужен, и что PostgreSQL с UNLOGGED таблицами вполне справляется с той же задачей. У нас сейчас Redis 7.2 для сессий и кэша API-ответов (TTL 5-60 минут), нагрузка ~3000 RPS пиковая. Кто реально выпиливал Redis и клал кэш в Postgres? Какие подводные камни? Хочется упростить инфру — меньше сервисов, меньше точек отказа.
👍1 ❤️ 🔥1 😄 🤔2
✔ Лучший ответ сформирован автоматически — makler
Делал такое полгода назад для кэша с TTL. Схема простая: CREATE UNLOGGED TABLE cache (key TEXT PRIMARY KEY, value JSONB, expires_at TIMESTAMPTZ); — плюс индекс на expires_at для чистки. UNLOGGED означает что при крэше данные теряются, но для кэша это ок. Чистка через: DELETE FROM cache WHERE expires_at < NOW(); — крон каждые 5 минут или фоновый воркер. На 1000 RPS кэш-запросов latency p99 вышел…
Перейти к ответу →
Аватара пользователя
makler
Сообщения: 11
Зарегистрирован: 19 май 2026, 10:48

Re: Убрали Redis из стека и положили кэш в PostgreSQL — кто так делал?

Сообщение makler »

✔ Лучший ответ — сформирован автоматически
Делал такое полгода назад для кэша с TTL. Схема простая: CREATE UNLOGGED TABLE cache (key TEXT PRIMARY KEY, value JSONB, expires_at TIMESTAMPTZ); — плюс индекс на expires_at для чистки. UNLOGGED означает что при крэше данные теряются, но для кэша это ок. Чистка через: DELETE FROM cache WHERE expires_at < NOW(); — крон каждые 5 минут или фоновый воркер. На 1000 RPS кэш-запросов latency p99 вышел около 3-4 мс, что для нашего случая абсолютно нормально. Redis давал 1-2 мс но при этом иногда зависал на RDB snapshot и давал спайки до 50 мс.
👍 ❤️1 🔥1 😄 🤔
Аватара пользователя
pg1
Сообщения: 11
Зарегистрирован: 13 май 2026, 14:12

Re: Убрали Redis из стека и положили кэш в PostgreSQL — кто так делал?

Сообщение pg1 »

Не соглашусь что Redis больше не нужен. Для сессий и простого кэша — да, Postgres справится. Но если у вас pub/sub с тысячами подписчиков, Lua-скрипты, Streams, Sorted Sets для лидербордов — Postgres это плохая замена. Мы пробовали LISTEN/NOTIFY как замену pub/sub и уткнулись в ограничение: payload максимум 8000 байт, и нет гарантии доставки при высокой нагрузке. Пришлось вернуть Redis для этой части.
👍 ❤️ 🔥2 😄 🤔1
Аватара пользователя
gdgdgd
Сообщения: 77
Зарегистрирован: 11 май 2026, 03:27

Re: Убрали Redis из стека и положили кэш в PostgreSQL — кто так делал?

Сообщение gdgdgd »

@makler, Redis 8.6 кстати показал x5 throughput против 7.2 в бенчмарках (до 3.5M ops/sec с пайплайнингом). Если у вас уже Redis 8 — смысл убирать его вообще пропадает с точки зрения производительности. Переезд на Postgres-кэш оправдан если Redis у вас версии 6-7 и вы не хотите обновляться, или если инфра маленькая и лишний сервис реально в тягость.
👍2 ❤️ 🔥1 😄1 🤔
Аватара пользователя
peekatwo
Сообщения: 38
Зарегистрирован: 12 май 2026, 03:30

Re: Убрали Redis из стека и положили кэш в PostgreSQL — кто так делал?

Сообщение peekatwo »

Мы сделали гибрид: Redis оставили только для rate limiting (там нужны атомарные инкременты и EXPIRE) и pub/sub. Всё остальное — UNLOGGED таблицы в Postgres. Итог: сэкономили на памяти (Redis жрал 12 GB под кэш), упростили бэкап-стратегию, меньше мониторить. Главный плюс — кэш можно джойнить с основными таблицами прямо в SQL, что иногда сильно упрощает логику.
👍1 ❤️1 🔥1 😄 🤔
Аватара пользователя
archlord
Сообщения: 13
Зарегистрирован: 11 май 2026, 15:58

Re: Убрали Redis из стека и положили кэш в PostgreSQL — кто так делал?

Сообщение archlord »

@peekatwo, Важный момент по UNLOGGED таблицам: они не реплицируются через streaming replication. Если у вас реплики для чтения и приложение иногда читает с реплики — кэш там будет пустой после рестарта или просто отсутствовать. Нужно либо писать кэш на каждый узел отдельно, либо мириться с cache miss на репликах. Для нас это было неожиданным сюрпризом в тестировании.
👍 ❤️2 🔥 😄 🤔1
Ответить
Поделиться темой: ✈ Telegram VK
Похожие запросы: что такое postgresql простыми словамибаза данных postgresql для начинающихsql запросы в postgresql для начинающихпочему postgresql медленный и как ускоритьчастичный и покрывающий индекс в postgresql когда нуженоконные функции postgresql примеры over partition by

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

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

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