Redis
Redis — это высокопроизводительная In-Memory база данных, использующая оперативную память для хранения структуры «ключ — значение».
Что даёт
Традиционные реляционные базы вроде PostgreSQL или MySQL сохраняют всё на диск. Даже с набором индексов и на NVMe-накопителях чтение занимает миллисекунды. Redis держит весь рабочий набор данных прямо в RAM, поэтому отдает и записывает их со скоростью в доли миллисекунды.
При этом Redis — это не примитивное key-value хранилище вроде Memcached. Он умеет из коробки работать с развитыми структурами данных: списками, множествами, хеш-таблицами, отсортированными множествами (Sorted Sets) и Pub/Sub каналами. Вам не нужно забирать весь объект в приложение, чтобы модифицировать одно поле — Redis сделает это атомарно прямо в памяти.
За что его ценят в инфраструктуре:
- Минимальные задержки. Время отклика на запрос стабильно держится в районе субмиллисекунд.
- Разгрузка основной БД. Повторяющиеся тяжёлые SQL-запросы (каталоги, счетчики, корзины) кешируются и не доходят до диска.
- Атомарность операций. Любые изменения структур происходят в один поток, без гонок данных (race conditions).
- Снапшоты на диск. Данные можно периодически сбрасывать на диск (RDB) или писать append-only лог (AOF), чтобы не потерять состояние при перезагрузке сервера.
Как использовать
Чаще всего Redis ставят как вспомогательный слой между приложением и реляционной базой данных.
- Кеширование и сессии. В Redis сбрасывают авторизационные токены пользователей, корзины интернет-магазинов и готовый HTML-вывод блоков CMS. При перезапуске PHP-FPM или Node.js юзеры не «вылетают» из личных кабинетов.
- Очереди задач (Message Broker). За счёт структур типа List и Stream базы используют как легкую альтернативу RabbitMQ для Celery, Laravel Queues или Sidekiq. Тяжёлая задача (отправка письма, генерирование PDF) кладется в очередь, а фоновый воркер забирает её через LPOP или BRPOP.
- Счётчики и лимитёры. Для защиты от спама (Rate Limiting) или подсчёта просмотров на страницах идеально подходят команды INCR и EXPIRE. Вы увеличиваете счётчик за одну операцию и задаёте время жизни ключа (TTL).