База знаний
Redis — in-memory хранилище данных для кэширования, очередей и реального времени
Полный справочник по Redis: архитектура, структуры данных, Pub/Sub, Streams, кластеризация, тарифы и практические сценарии для AI-агентов и веб-приложений.
СейчасЧто такое Redis
- Что такое Redis
- Версии ветки Redis 8
- Основные возможности
- Интеграция и подключение
- Установка
- Клиентские библиотеки
- Подключение из Python
- Подключение из Node.js
- Авторизация и TLS
- Ключевые структуры данных
- Strings
- Hashes
- Sorted Sets
- Streams
- Pub/Sub — широковещательные сообщения
- Персистентность и резервное копирование
- Кластеризация и масштабирование
- Тарифы и лимиты
- Open Source (self-hosted)
- Redis Cloud
- Valkey (open-source форк)
- Практические сценарии
- Кэширование API-ответов
- Очередь задач для AI-агентов
- Rate limiting
- Сессии и real-time присутствие
- Контекстный слой для AI-приложений
- Redis Iris — контекстный слой для агентов
- Мониторинг и отладка
- Чеклист быстрой проверки
- Ссылки
In-memory хранилище данных с открытым исходным кодом. Используется как кэш, брокер сообщений, база данных реального времени и контекстный слой для AI-приложений. Отвечает быстрее миллисекунды, поддерживает больше десятка структур данных и масштабируется от одного процесса до geo-distributed кластера.
Что такое Redis
Redis (Remote Dictionary Server) — хранилище данных в оперативной памяти, которое отдаёт ответы быстрее миллисекунды. Создатель — Сальваторе Санфилиппо (antirez). Проект стартовал в 2009 году как простой key-value store, но за 17 лет превратился в полноценную платформу для работы с данными в реальном времени.
Главное отличие от классических баз данных: данные живут в RAM, а не на диске. Диск используется только для персистентности — чтобы не потерять всё при перезагрузке. Отсюда скорость: сама команда выполняется за десятки микросекунд, а клиент с учётом сетевого round-trip обычно видит от 0,1 до 1 мс на операцию. Свой базовый уровень проверяется командой redis-cli --intrinsic-latency.
Redis — однопоточный по дизайну (ядро обрабатывает команды в одном потоке, I/O — в нескольких). Это упрощает модель конкурентности: нет блокировок, нет race conditions на уровне команд. Каждая команда атомарна.
Версии ветки Redis 8
Ветка 8.x выходит несколько раз в год, минорные версии добавляют команды и типы данных. Если вы обновляетесь с 7.x, сверяйтесь с release notes: часть изменений ломающие.
| Версия | Дата | Что появилось |
| 8.0 | май 2025 | Redis Stack влит в дистрибутив Redis Open Source, тип Vector Set (preview), AGPLv3 как третья лицензия, до 87% ускорения отдельных команд |
| 8.2 | август 2025 | Упрощённое подтверждение и удаление сообщений сразу в нескольких consumer groups |
| 8.4 | ноябрь 2025 | Атомарный compare-and-set для строк, чтение idle-сообщений из PEL, гибридный поиск, SIMD-оптимизации, бинарное хранение числовых массивов в JSON |
| 8.6 | февраль 2026 | Идемпотентная запись в Streams, производительность и потребление памяти |
| 8.8 | май 2026 | Тип данных array, встроенный оконный rate limiter INCREX, XNACK для Streams, несколько агрегаторов в одной команде Time Series, выбор формата хранения float-массивов в JSON, агрегатор COUNT для sorted sets |
| 8.10 | июль 2026 | Compact hashes (общая схема имён полей экономит память) и HIMPORT, команда BACKUP на основе MP-AOF, LMOVEM/BLMOVEM, SUNIONCARD/SDIFFCARD, ограничители MAXCOUNT и MAXSIZE для XREAD, аутентификация между узлами по TLS-сертификату |
Основные возможности
| Возможность | Описание |
| Кэширование | TTL на ключах, политики вытеснения (LRU, LFU, volatile, allkeys), максимально быстрый доступ к горячим данным |
| Структуры данных | Strings, Hashes, Lists, Sets, Sorted Sets, Streams, Arrays (с 8.8), Bitmaps, HyperLogLog, Geospatial indexes, Vector sets |
| Pub/Sub | Легковесная широковещательная рассылка сообщений подписчикам в реальном времени. Сообщения не персистентны — доставляются только активным подписчикам |
| Streams | Персистентный лог событий с consumer groups (аналог Kafka-паттерна). Подходит для очередей задач и event-driven архитектур |
| Транзакции и Lua | MULTI/EXEC для атомарных пакетов команд, встроенный Lua-движок для серверных скриптов |
| Персистентность | RDB-снапшоты (периодические дампы) и AOF (append-only file, журнал операций). Можно комбинировать |
| Кластеризация | Redis Cluster — автоматический шардинг на 16 384 хэш-слота, встроенная репликация и failover |
| Встроенные компоненты | С версии 8.0 бывший Redis Stack входит в базовый дистрибутив: Search and Query, JSON, Time Series и пять вероятностных структур (Bloom filter, Cuckoo filter, Count-min sketch, Top-k, t-digest). Отдельно ставить модули не нужно |
| Векторный поиск | Тип Vector Set (VADD, VSIM) для поиска по сходству плюс k-NN, гибридный и полнотекстовый поиск в Search and Query. Основа для памяти и RAG в AI-приложениях. Vector Set вышел в статусе beta, его API может меняться — сверяйтесь с документацией перед продакшеном |
| Rate limiting | Команда INCREX с версии 8.8: оконный счётчик с верхней границей и TTL окна, без Lua-скриптов |
Интеграция и подключение
Установка
Локально (macOS):
brew install redis
redis-serverDocker:
# тег 8-alpine всегда указывает на свежую версию ветки 8.x
docker run -d --name redis -p 6379:6379 redis:8-alpineПроверка соединения:
redis-cli ping
# PONG
# Проверка версии сервера
redis-cli info server | grep redis_versionКлиентские библиотеки
| Язык | Библиотека | Установка |
| Python | redis-py | pip install redis |
| Node.js | ioredis | npm install ioredis |
| Go | go-redis | go get github.com/redis/go-redis/v9 |
| Rust | redis-rs | cargo add redis |
| Java | Jedis / Lettuce | Maven / Gradle |
Подключение из Python
import redis
r = redis.Redis(host="localhost", port=6379, decode_responses=True)
# Записать и прочитать
r.set("user:1:name", "Sergey", ex=3600) # TTL 1 час
name = r.get("user:1:name")
print(name) # Sergey
# Hash
r.hset("session:abc", mapping={"user_id": "1", "role": "admin"})
session = r.hgetall("session:abc")Подключение из Node.js
import Redis from "ioredis";
const redis = new Redis(); // localhost:6379
await redis.set("cache:prices", JSON.stringify({ usd: 92.5 }), "EX", 300);
const prices = JSON.parse(await redis.get("cache:prices"));Авторизация и TLS
В продакшене Redis защищается паролем (requirepass в конфиге) и TLS. Redis Cloud и managed-сервисы предоставляют endpoint с TLS из коробки.
# Подключение с паролем и TLS
redis-cli -h my-redis.cloud.redislabs.com -p 16379 --tls --askpassКлючевые структуры данных
Strings
Базовый тип. Хранит строки, числа, сериализованные объекты. Максимальный размер — 512 МБ.
SET counter 0
INCR counter # 1
INCRBY counter 10 # 11Hashes
MAP внутри ключа. Удобно для объектов — не нужно сериализовать весь объект ради одного поля.
HSET user:1 name "Sergey" role "admin" score 42
HGET user:1 name # "Sergey"
HINCRBY user:1 score 5 # 47Sorted Sets
Множество с числовым score. Автоматическая сортировка. Идеально для лидербордов, рейтингов, приоритетных очередей.
ZADD leaderboard 1500 "alice" 2300 "bob" 1800 "carol"
ZRANGE leaderboard 0 -1 WITHSCORES # alice 1500, carol 1800, bob 2300
ZREVRANK leaderboard "bob" # 0 (первое место)Streams
Персистентный лог с consumer groups. Каждое сообщение имеет автоматический ID (timestamp + sequence).
# Продюсер
XADD events * type "order" amount 1500
# Consumer group
XGROUP CREATE events workers $ MKSTREAM
XREADGROUP GROUP workers agent-1 COUNT 10 BLOCK 5000 STREAMS events >
# Подтверждение
XACK events workers 1715356800000-0
# Явный возврат сообщения в очередь без ожидания idle-таймаута (Redis 8.8+)
XNACK events workers IDS 1 1715356800000-0Pub/Sub — широковещательные сообщения
Pub/Sub подходит для уведомлений, live-обновлений и событийной архитектуры, где потеря отдельного сообщения некритична.
# Терминал 1 — подписчик
SUBSCRIBE notifications
# Терминал 2 — публикация
PUBLISH notifications '{"type": "deploy", "service": "api"}'Персистентность и резервное копирование
Redis предлагает два механизма сохранения данных на диск:
- RDB (снапшоты) — периодические дампы всей базы. Компактный формат, быстрая загрузка при старте. Можно потерять данные между снапшотами.
- AOF (append-only file) — журнал каждой операции записи. Можно настроить
fsyncна каждую секунду или каждую команду. Надёжнее, но файл больше.
Рекомендация для продакшена: включить оба. RDB для быстрого восстановления, AOF для минимальной потери данных.
# redis.conf
save 900 1 # RDB: снапшот если >= 1 изменение за 900 сек
save 300 10 # или >= 10 изменений за 300 сек
appendonly yes # AOF включён
appendfsync everysec # fsync раз в секундуКластеризация и масштабирование
| Режим | Когда использовать | Особенности |
| Standalone | Разработка и небольшие проекты, данные которых помещаются в память одного сервера | Один процесс, максимальная простота |
| Sentinel | Продакшен без шардинга | Автоматический failover master → replica, мониторинг |
| Redis Cluster | Большие объёмы данных, высокая пропускная способность | Автошардинг на 16 384 слота, встроенная репликация. Минимум 3 master-ноды |
| Redis Cloud (Active-Active) | Geo-distributed приложения | CRDT-репликация между регионами, conflict-free merge |
Тарифы и лимиты
Open Source (self-hosted)
Бесплатно. Ограничения задаёт только ваш сервер: объём RAM, CPU и сеть. Лицензия выбирается из трёх вариантов: RSALv2, SSPLv1 или AGPLv3. Для обычного использования в своём продукте это ничего не меняет. Ограничения касаются двух случаев: перепродажи Redis как managed-сервиса и раскрытия исходного кода при модификации Redis под AGPLv3.
Redis Cloud
| План | Стоимость | Что входит |
| Free | Бесплатно | 30 МБ, одна база, до 100 операций в секунду и 5 ГБ трафика в месяц. Для экспериментов и прототипов |
| Essentials | от $5/мес | Платные фиксированные планы от 250 МБ до 12 ГБ (от 1000 до 16 000 операций в секунду), высокая доступность, TLS, ежедневные и мгновенные бэкапы. Отдельный вариант Essentials с Redis Flex держит горячие ключи в RAM, остальное на SSD и масштабируется до 100 ГБ |
| Pro | По потреблению | Гибкие конфигурации, Active-Active, VPC peering и PrivateLink, сервисы Iris, passwordless-аутентификация для подписок с закрытым публичным endpoint |
Тарифы проверены 2 августа 2026 по странице цен и калькулятору Redis. Стоимость меняется, перед расчётом бюджета сверяйтесь с официальным источником.
Valkey (open-source форк)
Полностью бесплатный форк Redis 7.2.4 под BSD-лицензией. Поддерживается Linux Foundation, AWS, Google и Oracle, совместим с Redis по протоколу, используется по умолчанию в большинстве Linux-дистрибутивов и у части облачных провайдеров. Взамен вы теряете новые возможности ветки Redis 8: Vector Set, встроенные Search и JSON, тип array и INCREX.
Практические сценарии
Кэширование API-ответов
Самый распространённый сценарий. Сохраняете результат тяжёлого запроса с TTL — следующие обращения отдаются из памяти.
import json, redis, requests
r = redis.Redis(host="localhost", port=6379, decode_responses=True)
def get_weather(city: str) -> dict:
cached = r.get(f"weather:{city}")
if cached:
return json.loads(cached)
response = requests.get(f"https://api.weather.com/{city}")
data = response.json()
r.set(f"weather:{city}", json.dumps(data), ex=600) # кэш на 10 минут
return dataОчередь задач для AI-агентов
Redis Streams — готовая инфраструктура для распределения задач между агентами.
# Продюсер — добавляет задачу
r.xadd("agent:tasks", {"type": "summarize", "url": "https://example.com/article"})
# Воркер — забирает и обрабатывает
messages = r.xreadgroup(
groupname="workers",
consumername="agent-1",
streams={"agent:tasks": ">"},
count=1,
block=5000
)Rate limiting
С Redis 8.8 оконный счётчик встроен в ядро. Команда INCREX увеличивает счётчик, ставит TTL только при создании окна (модификатор ENX) и отклоняет запрос при выходе за верхнюю границу. В ответе приходят новое значение счётчика и фактически применённый инкремент: нулевой инкремент означает, что лимит исчерпан.
# Окно 60 секунд, не больше 100 запросов на пользователя
INCREX ratelimit:user:1 BYINT 1 UBOUND 100 EX 60 ENXНа версиях до 8.8 тот же лимит собирается вручную через sliding window на Sorted Sets.
import time
def is_rate_limited(user_id: str, limit: int = 100, window: int = 60) -> bool:
key = f"ratelimit:{user_id}"
now = time.time()
pipe = r.pipeline()
pipe.zremrangebyscore(key, 0, now - window) # убрать старые
pipe.zadd(key, {str(now): now}) # добавить текущий
pipe.zcard(key) # посчитать
pipe.expire(key, window) # TTL на ключ
_, _, count, _ = pipe.execute()
return count > limitСессии и real-time присутствие
Hashes для хранения сессий, Sorted Sets для отслеживания онлайн-пользователей.
# Сессия
HSET session:token123 user_id 1 role admin last_seen 1715356800
EXPIRE session:token123 3600
# Онлайн-пользователи (score = timestamp последней активности)
ZADD online_users 1715356800 "user:1"
ZRANGEBYSCORE online_users 1715356740 +inf # активные за последнюю минутуКонтекстный слой для AI-приложений
Redis используется как memory layer для LLM-приложений: хранение эмбеддингов, кэширование промптов, управление conversation history.
# Сохранить историю диалога
r.lpush("chat:session:abc", json.dumps({"role": "user", "content": "Что такое Redis?"}))
r.lpush("chat:session:abc", json.dumps({"role": "assistant", "content": "Redis — это..."}))
r.ltrim("chat:session:abc", 0, 49) # хранить последние 50 сообщений
r.expire("chat:session:abc", 86400) # TTL 24 часа
# Прочитать контекст для следующего запроса к LLM
history = [json.loads(m) for m in r.lrange("chat:session:abc", 0, -1)]Redis Iris — контекстный слой для агентов
В мае 2026 Redis выпустил Iris: набор управляемых сервисов Redis Cloud, которые собирают контекст для AI-агентов и работают через REST API, без ручной настройки базы.
| Сервис | Задача |
| Context Retriever | Превращает бизнес-данные в описанные инструменты, которыми агент может пользоваться предсказуемо |
| Agent Memory | Краткосрочная память сессии и долгосрочная память между задачами |
| LangCache | Семантическое кэширование ответов LLM: похожие запросы отдаются из кэша |
| Data Integration | Синхронизация данных из реляционных баз в Redis Cloud, чтобы агент работал со свежим состоянием |
Под всем этим работает Redis Search как слой извлечения. Context Retriever и Agent Memory на момент анонса были доступны в статусе preview, поэтому проверяйте текущий статус в документации перед продакшеном.
Мониторинг и отладка
| Команда / инструмент | Назначение |
INFO | Полная статистика сервера: память, клиенты, репликация, keyspace |
MONITOR | Реалтайм-лог всех команд (только для отладки, снижает производительность) |
SLOWLOG GET 10 | 10 самых медленных команд |
MEMORY USAGE <key> | Сколько байт занимает конкретный ключ |
| Redis Insight | GUI-клиент от Redis Ltd. Визуализация данных, профилирование, просмотр Streams |
redis-cli --latency | Замер латентности до сервера |
KEYS * в продакшене — команда сканирует весь keyspace и блокирует сервер. Используйте SCAN с курсором.Чеклист быстрой проверки
PING, версия проверена через INFO servermaxmemory установлен, политика вытеснения выбрана (allkeys-lru для кэша)requirepass), TLS включён в продакшенеKEYS * нигде не используется — только SCANINFO, алерты на memory usage)redis-cli --latencyСсылки
- Официальный сайт Redis
- Документация Redis
- Redis University — бесплатные курсы
- Redis Insight (GUI-клиент)
- GitHub: Redis
- GitHub: Valkey (open-source форк)
- Redis Cloud — managed сервис
- Что нового в Redis 8.8
- Release notes Redis Open Source
- Документация Redis Iris
По теме
Redis часто становится первым инструментом, который появляется в стеке, когда проект перерастает файловый кэш. Если вы строите систему с реальным временем отклика или хотите разобраться, как вписать Redis в архитектуру AI-агентов, — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.