# Redis

> Хранилище данных в оперативной памяти со структурами данных — строками, списками, хешами, множествами, сортированными множествами, потоками; используется как кэш, брокер сообщений, счётчики и очереди.

Источник: https://llmdocs.ru/wiki/redis/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Полное название**: Remote Dictionary Server
- **Автор**: Сальваторе Санфилиппо (antirez)
- **Первый выпуск**: 2009
- **Язык**: C
- **Модель**: ключ-значение со структурами данных, в памяти
- **Лицензия**: с 2024 — RSALv2/SSPLv1, с Redis 8 (2025) также AGPLv3
- **Форк**: Valkey (Linux Foundation, 2024, лицензия BSD)
- **Порт по умолчанию**: 6379
**Redis** (от *Remote Dictionary Server*) — хранилище данных, которое держит всё в оперативной памяти и поэтому отвечает за доли миллисекунды. В отличие от простых кэшей «ключ — строка», Redis хранит под ключами **структуры данных** — списки, хеши, множества, сортированные множества, потоки — и выполняет над ними атомарные операции на сервере. Это делает его универсальным инструментом: кэш, хранилище сессий, счётчики и ограничители частоты запросов, очереди задач, рейтинги, публикация и подписка.[1]

Redis — одна из самых популярных баз данных; его применяют почти в любом крупном веб-сервисе рядом с основной [реляционной базой](https://llmdocs.ru/wiki/relational-database.md).

## История

Итальянский программист Сальваторе Санфилиппо (antirez) начал писать Redis в 2009 году, чтобы ускорить свой сервис веб-аналитики, которому не хватало скорости MySQL. Проект быстро стал популярным; с 2015 года его развитие спонсировала компания Redis Labs (ныне Redis Ltd.). В 2020 году Санфилиппо отошёл от проекта, а в конце 2024 года вернулся.

В марте 2024 года Redis Ltd. сменила открытую лицензию BSD на RSALv2 и SSPLv1, запрещающие облачным провайдерам предлагать Redis как сервис без договорённости. В ответ Linux Foundation при поддержке AWS, Google и других компаний создала открытый форк **Valkey** на основе последней BSD-версии.[5] В 2025 году с выходом Redis 8 компания добавила открытую лицензию AGPLv3.[6]

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

| Тип | Описание | Примеры применения |
|---|---|---|
| String | строка или число до 512 МБ | кэш, счётчики (`INCR`), флаги |
| Hash | словарь полей | объекты: профиль пользователя |
| List | связный список | очереди задач, последние события |
| Set | множество уникальных значений | теги, уникальные посетители |
| Sorted Set | множество с числовыми оценками, упорядоченное | рейтинги, приоритетные очереди, временные окна |
| Stream | журнал записей с группами потребителей | очереди сообщений, события |
| Bitmap, HyperLogLog | биты; приближённый подсчёт уникальных | активность по дням, подсчёт миллионов уникальных |
| Geo | координаты | «ближайшие точки» |

Помимо этого есть публикация/подписка (Pub/Sub), транзакции `MULTI`/`EXEC`, скрипты на Lua и функции, а в новых версиях — поиск, JSON и векторные множества для [векторного поиска](https://llmdocs.ru/wiki/vector-search.md).[2]

## Примеры

```bash
redis-cli
SET page:/home "<html>..." EX 60          # кэш на 60 секунд
GET page:/home
INCR views:article:42                     # атомарный счётчик
HSET user:42 name "Алиса" plan "pro"      # хеш
ZADD leaderboard 1500 alice 1200 bob      # рейтинг
ZREVRANGE leaderboard 0 9 WITHSCORES      # топ-10
LPUSH jobs '{"type":"email","to":42}'     # очередь задач
BRPOP jobs 0                              # обработчик ждёт задачу
```

Ограничитель частоты запросов на [Python](https://llmdocs.ru/wiki/python.md) — классический пример:

```python
import redis

r = redis.Redis()

def allow(user_id: int, limit: int = 100) -> bool:
    key = f"rate:{user_id}"
    count = r.incr(key)
    if count == 1:
        r.expire(key, 60)              # окно в одну минуту
    return count <= limit
```

## Как устроен

- **Однопоточное выполнение команд.** Команды выполняются по одной в основном потоке, поэтому каждая атомарна, а гонки между командами невозможны. Сетевой ввод-вывод может обрабатываться дополнительными потоками. Следствие: медленная команда (`KEYS *` на миллионах ключей) блокирует всех — вместо неё используют `SCAN`.
- **Сохранение на диск.** RDB — периодические снимки, AOF — журнал всех команд записи; их можно сочетать. При отказе возможно потерять данные за последнюю секунду или интервал снимка.[3]
- **Вытеснение.** При достижении `maxmemory` Redis удаляет ключи по политике (например, `allkeys-lru` — давно не использованные), что и нужно для кэша.
- **Масштабирование.** Репликация на реплики, Sentinel для автоматического переключения при отказе и Redis Cluster, распределяющий ключи по 16 384 слотам между узлами (см. [Шардирование](https://llmdocs.ru/wiki/sharding.md)).[4]

## Кэширование

Самый частый сценарий — кэш перед основной базой (*cache-aside*): приложение сначала ищет данные в Redis, при промахе читает из [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md) и кладёт результат в кэш со сроком жизни. Главные вопросы — инвалидация (удалить ключ при изменении данных) и защита от лавины запросов при одновременном истечении популярного ключа (см. [Кэш (вычисления)](https://llmdocs.ru/wiki/cache.md)).

## Ограничения

- Объём данных ограничен оперативной памятью, которая дороже диска.
- Гарантии сохранности слабее, чем у реляционных СУБД: Redis не стоит делать единственным хранилищем важных данных без понимания настроек сохранения.
- Нет сложных запросов и соединений — модель данных нужно проектировать под конкретные операции.
- По умолчанию сервер не защищён: его нельзя открывать в интернет без пароля, ACL и [TLS](https://llmdocs.ru/wiki/tls.md).

## Альтернативы и совместимые системы

Valkey — открытый форк, совместимый по протоколу; KeyDB и Dragonfly — многопоточные реализации совместимого протокола; Memcached — более простой кэш «ключ — строка». Облачные провайдеры предлагают управляемые сервисы на основе Redis или Valkey.

## См. также

- [NoSQL](https://llmdocs.ru/wiki/nosql.md)
- [Кэш (вычисления)](https://llmdocs.ru/wiki/cache.md)
- [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md)
- [Шардирование](https://llmdocs.ru/wiki/sharding.md)
- [Репликация баз данных](https://llmdocs.ru/wiki/replication.md)

## Источники

1. [Redis Documentation](https://redis.io/docs/latest/)
2. [Redis — Data types](https://redis.io/docs/latest/develop/data-types/)
3. [Redis — Persistence](https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/)
4. [Redis — Cluster specification](https://redis.io/docs/latest/operate/oss_and_stack/reference/cluster-spec/)
5. [Valkey](https://valkey.io/)
6. [antirez — Redis is open source again (2025)](https://antirez.com/news/151)
