← Все статьи

Redis простыми словами: что это такое и когда его использовать

Burncode Team 3 минуты чтения

Redis так часто называют «просто кешем», что его возможности недооценивают, и это жаль: это по-настоящему универсальный инструмент, и как только понимаешь, что он делает внутри, становится ясно, почему он встречается в таком количестве продакшен-систем.

Что такое Redis на самом деле

Redis — это хранилище данных в оперативной памяти: он держит данные в RAM, а не на диске, поэтому в поддерживаемых им операциях он работает на порядки быстрее традиционной базы данных. Чтение из памяти занимает микросекунды, чтение с диска — даже с быстрого SSD — заметно дольше. Ради этой разницы в скорости Redis и существует.

В отличие от простого кеша «ключ — значение», Redis напрямую поддерживает действительно полезные структуры данных — строки, списки, множества, сортированные множества, хеши, — поэтому вы не ограничены сохранением и чтением простых блоков данных. Можно добавлять и извлекать элементы списка, атомарно увеличивать счётчик или выбирать элементы сортированного множества по весу — и всё это быстрые встроенные операции.

Где Redis используют на практике

  • Кеширование: самый частый сценарий — сохранить в Redis результат дорогого запроса к базе данных или вызова API и отдавать его из памяти при следующих запросах, а не вычислять заново каждый раз.
  • Хранение сессий: данные пользовательских сессий постоянно читаются и записываются, но не требуют гарантий долговременного хранения, поэтому настолько быстрое хранилище подходит им идеально.
  • Ограничение частоты запросов: атомарные операции со счётчиками превращают проверку «не отправил ли этот IP слишком много запросов за последнюю минуту» в быструю и надёжную операцию.
  • Рейтинги в реальном времени: сортированные множества практически созданы для запросов вида «топ-10 по очкам», которые постоянно обновляются.
  • Обмен сообщениями pub/sub: Redis может в реальном времени рассылать сообщения между разными частями системы, что удобно, например, для живых уведомлений.
  • Очереди задач: многие системы фоновых задач используют Redis как хранилище для задач, ожидающих обработки.

Компромисс, который нужно понимать

Скорость Redis обеспечивается тем, что данные живут в памяти, а память по умолчанию и дороже, и менее надёжна, чем диск. Если сервер Redis перезапустится, данные могут потеряться, если вы явно не настроили персистентность (Redis это поддерживает, но со своими компромиссами). Практический вывод: Redis отлично подходит для данных, которые либо одноразовые, либо восстанавливаемые, — кеш всегда можно заново собрать из исходной базы данных, — и требует тщательной настройки, если вы храните в нём что-то, что действительно нельзя потерять.

Когда за него действительно стоит браться

Если у вас есть дорогой запрос или вычисление, которое не нужно пересчитывать при каждом обращении, кешируйте его в Redis. Если вы делаете что-то с ограничением частоты запросов, счётчиками в реальном времени или рейтингами, Redis справится с этим лучше, чем когда-либо сможет универсальная реляционная база. Если же данные обязательно должны пережить перезапуск сервера и их нельзя восстановить из другого источника, им место в базе данных, для которой надёжность хранения — главная цель, например в Postgres.

Решать, какие части системы должны жить в быстром временном хранилище вроде Redis, а какие — в надёжной базе данных, нам приходится почти в каждом проекте по облачной инфраструктуре. И от правильного решения часто зависит, останется ли продукт быстрым под реальной нагрузкой или будет незаметно замедляться по мере роста.