Redis простыми словами: что это такое и когда его использовать
Redis так часто называют «просто кешем», что его возможности недооценивают, и это жаль: это по-настоящему универсальный инструмент, и как только понимаешь, что он делает внутри, становится ясно, почему он встречается в таком количестве продакшен-систем.
Что такое Redis на самом деле
Redis — это хранилище данных в оперативной памяти: он держит данные в RAM, а не на диске, поэтому в поддерживаемых им операциях он работает на порядки быстрее традиционной базы данных. Чтение из памяти занимает микросекунды, чтение с диска — даже с быстрого SSD — заметно дольше. Ради этой разницы в скорости Redis и существует.
В отличие от простого кеша «ключ — значение», Redis напрямую поддерживает действительно полезные структуры данных — строки, списки, множества, сортированные множества, хеши, — поэтому вы не ограничены сохранением и чтением простых блоков данных. Можно добавлять и извлекать элементы списка, атомарно увеличивать счётчик или выбирать элементы сортированного множества по весу — и всё это быстрые встроенные операции.
Где Redis используют на практике
- Кеширование: самый частый сценарий — сохранить в Redis результат дорогого запроса к базе данных или вызова API и отдавать его из памяти при следующих запросах, а не вычислять заново каждый раз.
- Хранение сессий: данные пользовательских сессий постоянно читаются и записываются, но не требуют гарантий долговременного хранения, поэтому настолько быстрое хранилище подходит им идеально.
- Ограничение частоты запросов: атомарные операции со счётчиками превращают проверку «не отправил ли этот IP слишком много запросов за последнюю минуту» в быструю и надёжную операцию.
- Рейтинги в реальном времени: сортированные множества практически созданы для запросов вида «топ-10 по очкам», которые постоянно обновляются.
- Обмен сообщениями pub/sub: Redis может в реальном времени рассылать сообщения между разными частями системы, что удобно, например, для живых уведомлений.
- Очереди задач: многие системы фоновых задач используют Redis как хранилище для задач, ожидающих обработки.
Компромисс, который нужно понимать
Скорость Redis обеспечивается тем, что данные живут в памяти, а память по умолчанию и дороже, и менее надёжна, чем диск. Если сервер Redis перезапустится, данные могут потеряться, если вы явно не настроили персистентность (Redis это поддерживает, но со своими компромиссами). Практический вывод: Redis отлично подходит для данных, которые либо одноразовые, либо восстанавливаемые, — кеш всегда можно заново собрать из исходной базы данных, — и требует тщательной настройки, если вы храните в нём что-то, что действительно нельзя потерять.
Когда за него действительно стоит браться
Если у вас есть дорогой запрос или вычисление, которое не нужно пересчитывать при каждом обращении, кешируйте его в Redis. Если вы делаете что-то с ограничением частоты запросов, счётчиками в реальном времени или рейтингами, Redis справится с этим лучше, чем когда-либо сможет универсальная реляционная база. Если же данные обязательно должны пережить перезапуск сервера и их нельзя восстановить из другого источника, им место в базе данных, для которой надёжность хранения — главная цель, например в Postgres.
Решать, какие части системы должны жить в быстром временном хранилище вроде Redis, а какие — в надёжной базе данных, нам приходится почти в каждом проекте по облачной инфраструктуре. И от правильного решения часто зависит, останется ли продукт быстрым под реальной нагрузкой или будет незаметно замедляться по мере роста.