Databases

Redis

Redis (REmote DIctionary Server) — key-value СУБД, которая держит данные в оперативной памяти и применяется как кеш, брокер сообщений и хранилище сессий.

Что такое Redis

Redis (REmote DIctionary Server) — СУБД класса key-value, которая держит весь набор данных в оперативной памяти. Отсюда её главное свойство: типичная операция чтения или записи занимает десятки микросекунд, а один инстанс выдаёт десятки тысяч операций в секунду. Диск используется только для персистентности — восстановления данных после перезапуска.

Redis не заменяет PostgreSQL или MySQL, а дополняет их: горячие данные в Redis, источник истины — в реляционной базе.

«Редис» в русских текстах — это транслитерация названия Redis, к овощу отношения не имеет.

Структуры данных

Главное отличие Redis от простого кеша вроде Memcached — значение не обязано быть строкой:

Тип Что хранит Типичное применение
String Строка, число, бинарь Кеш, счётчики (INCR)
Hash Поля объекта Профиль, сессия
List Связный список Очередь задач (LPUSH/BRPOP)
Set Множество без повторов Уникальные посетители, теги
Sorted Set Множество с весами Рейтинги, leaderboard
Stream Журнал с ID и группами Событийные очереди
HyperLogLog Оценка мощности множества Счёт уникальных при малой памяти

Базовые команды

redis-cli -h 127.0.0.1 -p 6379

SET session:a1b2 "user_42" EX 3600     # ключ с TTL 1 час
GET session:a1b2
INCR page:views:home                   # атомарный счётчик
HSET user:42 name "Ivan" plan "pro"
ZADD leaderboard 1500 "user_42"
ZREVRANGE leaderboard 0 9 WITHSCORES   # топ-10
TTL session:a1b2                       # сколько секунд осталось

Порт по умолчанию — 6379. Команды выполняются в один поток, поэтому каждая операция атомарна: гонок между INCR от разных клиентов не бывает.

Зачем нужен на практике

  • Кеш перед базой: результат тяжёлого SELECT кладут в Redis с TTL и снимают нагрузку с диска.
  • Хранилище сессий: сессии живут вне приложения, поэтому за балансировщиком можно держать несколько реплик без sticky sessions.
  • Rate limiting: INCR + EXPIRE на ключ вида rl:<ip>:<минута>.
  • Очереди: списки и Streams заменяют полноценный брокер сообщений там, где не нужны гарантии RabbitMQ.
  • Распределённые блокировки через SET key val NX EX 30.

Персистентность: RDB и AOF

# redis.conf
save 900 1                  # RDB-снимок, если за 900 с был >=1 ключ изменён
appendonly yes              # AOF: дописывать каждую команду в журнал
appendfsync everysec        # компромисс скорость/надёжность
maxmemory 4gb
maxmemory-policy allkeys-lru  # вытеснять давно не используемые ключи

RDB — периодический бинарный снимок: компактный, быстро грузится, но при падении теряются изменения с момента последнего снимка. AOF — журнал команд: теряется не больше секунды при everysec, но файл растёт и требует перезаписи. Для кеша обычно хватает RDB, для хранилища с ценными данными включают AOF.

Ключевая настройка кеша — maxmemory вместе с maxmemory-policy. По умолчанию политика noeviction: при заполнении памяти Redis начнёт отвечать ошибками на запись вместо вытеснения, а на VPS без лимита процесс рискует попасть под OOM killer.

Отказоустойчивость

  • Репликация: replicaof <host> <port> — асинхронные реплики для чтения и резерва.
  • Sentinel: следит за мастером и автоматически повышает реплику при отказе.
  • Redis Cluster: шардирование по 16384 хеш-слотам, данные распределены между узлами.

Отдельно стоит помнить про лицензию: в 2024 году Redis ушёл с BSD на RSALv2/SSPL, после чего появился форк Valkey под управлением Linux Foundation. Для self-hosted-установок оба варианта совместимы по протоколу.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер