Redis (Remote Dictionary Server) — open-source in-memory хранилище данных, работающее в оперативной памяти. Поддерживает разнообразные структуры данных: строки, хеши, списки, множества, отсортированные множества, битмапы, HyperLogLog, потоки (Redis Streams). Используется преимущественно как кэш приложений, хранилище сессий, брокер сообщений (Pub/Sub) и бэкенд для очередей задач.
Структуры данных Redis
- String — базовый тип:
SET key value EX 3600(с TTL 1 час). Используется для кэширования HTML-страниц, значений счётчиков, флагов. - Hash — объект с именованными полями:
HSET user:42 name "Ivan" email "ivan@example.com". Удобен для хранения объектов с частичным обновлением. - List — двусвязный список с операциями LPUSH/RPUSH/LRANGE. Используется для очередей задач и хранения последних N событий.
- Set / Sorted Set — множество уникальных элементов. Sorted Set добавляет числовой score — используется для рейтингов и лидербордов.
- Stream — лог-подобная структура для потоковой обработки событий (Redis 5.0+). Аналог Kafka для небольших объёмов.
- HyperLogLog — вероятностная структура для подсчёта уникальных элементов с погрешностью 0,81%, занимает максимум 12 КБ.
Производительность Redis
Redis выполняет 100 000–1 000 000 операций в секунду на одном ядре. Типичная задержка GET/SET: 0,1–1 мс при локальном соединении. Это на 2–3 порядка быстрее чтения из PostgreSQL или MySQL при cache miss, где даже простой SELECT занимает 1–10 мс с учётом сетевого обмена.
Redis использует однопоточную модель для выполнения команд — это исключает race conditions без блокировок. Redis 6.0 (2020) добавил I/O threading для параллельного чтения/записи данных из сети, не нарушая последовательность выполнения команд. Redis 7.0 добавил threading для нескольких команд (LMPOP, ZMPOP).
История
Redis создал Сальваторе Санфилиппо (Salvatore Sanfilippo, известный как @antirez) в 2009 году для нужд своего итальянского стартапа LLOOGG — системы аналитики в реальном времени. Первый публичный релиз вышел в марте 2009 года. Спонсоры: VMware (2010–2013), Pivotal (2013–2015), Redis Labs (2015–2021). В 2021 году Redis Labs переименована в Redis Inc. В марте 2024 года Redis сменил лицензию с BSD на SSPL + RSALv2 (non-open-source), что вызвало создание форка Valkey под BSD-лицензией при поддержке Linux Foundation.
Redis в хостинге
Типичные сценарии использования Redis на VPS:
- Кэш страниц WordPress — плагины WP Redis, W3 Total Cache, Object Cache Pro хранят кэшированный HTML и результаты запросов к базе данных в Redis. Повторные запросы обслуживаются за 1–5 мс вместо 50–300 мс.
- Сессии PHP —
session.save_handler=redisв php.ini. Хранение сессий в Redis быстрее файловой системы и обязательно при горизонтальном масштабировании: несколько PHP-серверов читают сессии из общего Redis. - Rate limiting — подсчёт запросов с IP-адреса через INCR + EXPIRE. Атомарная операция без гонки данных.
- Очереди задач — backend для Laravel Horizon, Sidekiq, Celery. Redis используется как брокер между веб-сервером и воркерами.
На что обращать внимание
Безопасность: Redis по умолчанию доступен без пароля. Всегда настраивать requirepass и bind 127.0.0.1 — порт 6379 не должен быть открыт в публичный интернет. Для восстановления после перезапуска включить AOF-персистентность: appendonly yes в redis.conf. Без персистентности все данные теряются при перезапуске сервера. Для кластеризации Redis поддерживает Redis Cluster (горизонтальное масштабирование) и connection pooling через Redis Sentinel (высокая доступность через автоматический failover).