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-установок оба варианта совместимы по протоколу.
Связанные термины
- СУБД — класс систем, к которому относится Redis
- Реляционные и NoSQL БД — место key-value среди моделей данных
- Репликация — резерв и масштабирование чтения
- Шардирование — как устроен Redis Cluster
- Брокеры сообщений — альтернатива Redis для очередей
- PostgreSQL — типичный источник истины за кешем
Готовы запустить GPU-задачу?
Запустить GPU-сервер