Redis vs Valkey vs Dragonfly в 2026: какое in-memory хранилище выбрать
Содержание
Рынок in-memory хранилищ данных переживает один из самых бурных периодов за всю свою историю. В марте 2024 года Redis Labs изменила лицензию Redis с BSD на двойную source-available (RSALv2 / SSPLv1), что спровоцировало появление Valkey — форка под эгидой Linux Foundation. Параллельно набирает обороты Dragonfly — архитектурно новый движок, совместимый с Redis-протоколом, но использующий многопоточность на уровне ядра. В мае 2025 года Redis частично откатил решение, добавив третью лицензию — AGPLv3, но к тому моменту экосистема уже раскололась.
В этой статье мы детально сравним три in-memory хранилища — Redis 8.0, Valkey 9.0 и Dragonfly 1.36 — по архитектуре, производительности, лицензированию, экосистеме и сценариям использования. Статья адресована бэкенд-разработчикам, DevOps-инженерам и архитекторам, которые выбирают in-memory решение для нового проекта или рассматривают миграцию с классического Redis.
Обзор Redis 8.0
Redis (Remote Dictionary Server) — ветеран мира in-memory хранилищ, запущенный Сальваторе Санфилиппо (antirez) в 2009 году. С 2020 года проект принадлежит компании Redis Ltd (бывшая Redis Labs). Текущая стабильная версия — Redis 8.0, выпущенная в декабре 2025 года.
Ключевые нововведения Redis 8.0
Redis 8 стал самым масштабным обновлением за всю историю проекта. Главное изменение — интеграция ранее отдельных модулей (RedisJSON, RediSearch, RedisTimeSeries, RedisBloom) непосредственно в ядро:
- 8 новых структур данных — vector set (бета), JSON, time series, Bloom filter, cuckoo filter, count-min sketch, top-k, t-digest. Раньше для этого требовались отдельные модули Redis Stack.
- Производительность — более 30 оптимизаций: ускорение команд до 87%, удвоение пропускной способности (ops/sec), ускорение репликации до 18%, увеличение производительности Query Engine до 16x.
- Vector Set (бета) — нативная поддержка векторных множеств для AI/ML-задач: семантический поиск, рекомендации, RAG-пайплайны.
- Тройное лицензирование — RSALv2, SSPLv1 или AGPLv3 на выбор пользователя.
На GitHub репозиторий redis/redis насчитывает более 73 000 звёзд и более 700 контрибьюторов. Redis остаётся наиболее зрелым и функционально богатым решением в своей нише.
# Установка Redis 8.0 из официального репозитория
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
# Проверка версии
redis-server --version
# Redis server v=8.0.0 ...
Обзор Valkey 9.0
Valkey — форк Redis 7.2.4, созданный в марте 2024 года корпоративными контрибьюторами (Amazon, Google, Oracle, Ericsson, Snap) в ответ на изменение лицензии Redis. Проект управляется Linux Foundation и распространяется под лицензией BSD 3-Clause — без каких-либо ограничений на коммерческое использование.
Ключевые нововведения Valkey 9.0
Valkey 9.0, выпущенный в октябре 2025 года, — крупнейший релиз проекта, значительно расширяющий возможности по сравнению с исходным кодом Redis:
- Масштабируемость — кластер до 2 000 нод, протестированный на достижение более 1 миллиарда запросов в секунду. Это стало возможным благодаря оптимизации gossip-протокола и нового механизма атомарной миграции слотов.
- Производительность — прирост до 40% по сравнению с Valkey 8.1. Применены SIMD-оптимизации (AVX-512) для BITCOUNT и HyperLogLog (до 200% ускорения), zero-copy ответы для крупных запросов, memory prefetching для пайплайнинга команд, поддержка Multipath TCP (MPTCP).
- Атомарная миграция слотов — миграция целого слота одной операцией вместо покомандной миграции ключей, что критично для кластерных операций.
- Hash field expiration — TTL на уровне отдельных полей хеша, а не только на уровне ключа.
- Нумерованные базы данных в кластерном режиме — возможность использовать SELECT в кластере.
- Safe shutdown mode — предсказуемое завершение работы с минимизацией потери данных.
- Нативная TLS-аутентификация — аутентификация клиентов на основе сертификатов.
На GitHub репозиторий valkey-io/valkey набрал ~19 000 звёзд менее чем за два года. В 2025 году в проекте участвовали 346 активных контрибьюторов из почти 50 компаний.
# Установка Valkey 9.0 из исходников
git clone https://github.com/valkey-io/valkey.git
cd valkey
git checkout 9.0.0
make
sudo make install
# Запуск с включённым I/O multithreading
valkey-server --io-threads 4 --io-threads-do-reads yes
Обзор Dragonfly 1.36
Dragonfly — in-memory хранилище нового поколения, созданное с нуля в 2022 году командой под руководством Романа Гершмана (бывший инженер Google и Amazon). В отличие от Redis и Valkey, Dragonfly не является форком — это полная переимплементация на C++ с многопоточной архитектурой thread-per-core. Проект распространяется под лицензией BSL 1.1 (Business Source License), которая разрешает свободное использование, но запрещает продажу Dragonfly как сервиса.
Ключевые особенности Dragonfly
- Многопоточная архитектура — dataset разделён на независимые шарды, каждый из которых привязан к выделенному потоку. Это устраняет узкое место однопоточной модели Redis/Valkey и обеспечивает почти линейное масштабирование с ростом числа ядер CPU.
- Производительность — на инстансе c7gn.16xlarge (64 vCPU) Dragonfly достигает 6,43 миллиона операций в секунду — в 25 раз больше, чем однопроцессный Redis на том же оборудовании.
- Экономия памяти — на 30–38% меньше памяти по сравнению с Redis/Valkey при хранении аналогичного объёма данных. При снапшотах потребление памяти остаётся стабильным, тогда как Redis может увеличивать потребление до 3x.
- Совместимость — поддержка 240+ наиболее используемых команд Redis, включая нативную реализацию RedisJSON и поискового движка (аналог RediSearch).
- Встроенная поддержка OpenTelemetry для observability.
- Вероятностные структуры данных — Bloom filter, cuckoo filter и другие — доступны из коробки.
На GitHub dragonflydb/dragonfly насчитывает ~27 000 звёзд и 133 контрибьютора. Последний релиз — v1.36.11 от 22 февраля 2026 года.
# Запуск Dragonfly через Docker
docker run -d --name dragonfly -p 6379:6379 \
--ulimit memlock=-1 \
docker.dragonflydb.io/dragonflydb/dragonfly
# Подключение стандартным redis-cli
redis-cli -h localhost -p 6379
> SET hello "world"
OK
> GET hello
"world"
Архитектура: однопоточность vs многопоточность
Архитектурные различия — ключевой фактор, определяющий поведение каждого из трёх хранилищ под нагрузкой.
Redis и Valkey: однопоточное ядро с I/O-потоками
И Redis, и Valkey используют однопоточную event-loop модель для обработки команд и манипуляции данными. Это гарантирует атомарность операций без блокировок, но создаёт узкое место: одно ядро CPU обрабатывает все команды последовательно.
Начиная с Valkey 8.0, реализована улучшенная I/O-многопоточность: отдельные потоки занимаются чтением запросов и отправкой ответов, разгружая основной поток. Это позволило Valkey 8.0 достичь 1,19 млн RPS на 16-ядерном инстансе (AWS c7g.4xlarge) — рост на 230% по сравнению с Valkey 7.2. Redis 8.0 применяет аналогичный подход, но с менее агрессивными оптимизациями.
Тем не менее, для CPU-интенсивных операций (ZADD, ZRANGEBYSCORE, полнотекстовый поиск) основной поток остаётся узким местом.
Dragonfly: shared-nothing архитектура
Dragonfly реализует архитектуру shared-nothing с thread-per-core: весь dataset разделён на шарды, каждый шард привязан к конкретному ядру CPU. Потоки не конкурируют за общие данные, что устраняет необходимость в мьютексах. Для операций, затрагивающих несколько шардов, используется кооперативная многозадачность.
На практике это означает:
- Линейное масштабирование — добавление ядер CPU пропорционально увеличивает пропускную способность.
- Стабильная латентность — отсутствие lock contention приводит к более предсказуемым временам отклика.
- Эффективные снапшоты — Dragonfly использует фибры (coroutines) для создания снапшотов без fork(), что устраняет скачок потребления памяти, характерный для Redis.
# Сравнение потребления памяти при снапшоте (приблизительные значения)
# Redis/Valkey: 10 GB dataset → до 20 GB при BGSAVE (Copy-on-Write)
# Dragonfly: 10 GB dataset → ~10.5 GB при снапшоте (без fork)
Производительность: бенчмарки 2025–2026
Результаты бенчмарков зависят от оборудования, конфигурации и характера нагрузки. Приведём наиболее показательные сравнения из публичных тестов.
Пропускная способность (однонодовый режим)
На инстансе AWS c8g.2xlarge (Graviton4, 8 vCPU):
- Valkey 8.1 — ~950K RPS (GET), средняя латентность 0,21 мс
- Redis 8.0 — ~821K RPS (GET), средняя латентность 0,44 мс
- Valkey SET — 37% выше пропускная способность, чем у Redis 8.0
На инстансе AWS c6gn.16xlarge (64 vCPU):
- Dragonfly — 3,8 млн QPS (в 25 раз больше однопроцессного Redis)
- На c7gn.16xlarge Dragonfly достигает 6,43 млн QPS
CPU-интенсивные операции
На 48-ядерном сервере при операциях ZADD:
- Dragonfly — в 29 раз выше пропускная способность, чем у Valkey
- Valkey ограничен одним ядром для обработки команд, Dragonfly масштабируется линейно
Потребление памяти
В тесте с хранением ~200 млн элементов:
- Dragonfly — 17 ГБ, 198 млн элементов
- Valkey — 24,5 ГБ, 177 млн элементов
- Dragonfly экономит 38% памяти на элемент
Кластерное масштабирование
- Valkey 9.0 — кластер из 2 000 нод на r7g.2xlarge (8 vCPU, 64 ГБ RAM), более 1 миллиарда RPS
- Redis — кластерный режим поддерживает до нескольких сотен нод, ограничения gossip-протокола на больших масштабах
- Dragonfly — фокус на вертикальном масштабировании одной ноды, кластерный режим в развитии
Лицензирование и экосистема
Лицензия — один из определяющих факторов при выборе in-memory хранилища в 2026 году. Именно изменение лицензии Redis привело к появлению Valkey и ускорило рост Dragonfly.
Сравнительная таблица
| Характеристика | Redis 8.0 | Valkey 9.0 | Dragonfly 1.36 |
|---|---|---|---|
| Лицензия | RSALv2 / SSPLv1 / AGPLv3 | BSD 3-Clause | BSL 1.1 |
| Open Source (OSI) | Частично (AGPLv3) | Да | Нет (source-available) |
| Архитектура | Однопоточная + I/O threads | Однопоточная + I/O threads | Многопоточная (thread-per-core) |
| Макс. QPS (одна нода) | ~821K (8 vCPU) | ~950K (8 vCPU) | ~6,4M (64 vCPU) |
| Экономия памяти | Базовый уровень | Аналогично Redis | 30–38% меньше Redis |
| Кластеризация | Redis Cluster | Valkey Cluster (до 2000 нод) | Экспериментальная |
| JSON (нативный) | Да (интегрирован) | В планах (roadmap 2026) | Да (нативный) |
| Векторный поиск | Да (vector set, бета) | В планах (roadmap 2026) | Нет |
| Bloom filter | Да | В планах | Да |
| Поисковый движок | Redis Query Engine | Нет | Да (встроенный) |
| Управление | Redis Ltd | Linux Foundation | Dragonfly Ltd |
| GitHub звёзды | ~73K | ~19K | ~27K |
| Совместимость | 100% (эталон) | 99%+ (форк Redis) | 240+ команд |
| Облачные сервисы | Redis Cloud, AWS, Azure, GCP | AWS ElastiCache, Aiven | Dragonfly Cloud, Aiven |
Redis: тройная лицензия
С Redis 8.0 доступны три варианта лицензии: RSALv2, SSPLv1 и AGPLv3. Появление AGPLv3 — уступка сообществу после волны критики в 2024 году. AGPLv3 является OSI-одобренной открытой лицензией, однако её copyleft-природа обязывает раскрывать исходный код производных работ, включая сетевые сервисы. Для многих компаний это неприемлемо.
Valkey: чистый open source
Valkey использует BSD 3-Clause — максимально свободную лицензию без ограничений на коммерческое использование. Именно поэтому AWS ElastiCache, Google Cloud Memorystore и другие облачные провайдеры мигрировали на Valkey.
Dragonfly: BSL 1.1
Business Source License разрешает свободное использование и модификацию кода, но запрещает предоставление Dragonfly как сервиса (in-memory datastore as a service). Через 4 года после каждого релиза код переходит под Apache 2.0. Для подавляющего большинства компаний, использующих Dragonfly как внутренний компонент, BSL не создаёт ограничений.
Подключение из приложения: примеры кода
Все три хранилища совместимы с RESP-протоколом, что позволяет использовать одни и те же клиентские библиотеки. Покажем примеры подключения на Python и Node.js.
Python
# === Redis / Dragonfly — используем стандартный redis-py ===
import redis
# Подключение к Redis 8.0 или Dragonfly (один и тот же клиент)
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
# Базовые операции
r.set('user:1001', '{"name": "Alice", "role": "admin"}')
user = r.get('user:1001')
print(user) # {"name": "Alice", "role": "admin"}
# Работа с JSON (Redis 8.0 / Dragonfly)
r.execute_command('JSON.SET', 'doc:1', '$', '{"title": "Hello", "views": 0}')
r.execute_command('JSON.NUMINCRBY', 'doc:1', '$.views', 1)
result = r.execute_command('JSON.GET', 'doc:1')
print(result) # {"title":"Hello","views":1}
# Pipeline для пакетной обработки
pipe = r.pipeline()
for i in range(1000):
pipe.set(f'key:{i}', f'value:{i}')
pipe.execute() # Все 1000 команд отправляются одним пакетом
# === Valkey — используем valkey-py (форк redis-py) ===
import valkey
v = valkey.Valkey(host='localhost', port=6379, db=0, decode_responses=True)
# API полностью идентичен redis-py
v.set('session:abc', '{"user_id": 1001, "expires": 3600}')
v.expire('session:abc', 3600)
session = v.get('session:abc')
print(session)
# Hash field expiration (Valkey 9.0)
v.hset('user:1001', mapping={'name': 'Alice', 'temp_token': 'xyz123'})
v.execute_command('HEXPIRE', 'user:1001', 300, 'FIELDS', 1, 'temp_token')
# Поле temp_token будет удалено через 300 секунд
Node.js
// === Redis / Dragonfly — используем ioredis ===
import Redis from 'ioredis';
const redis = new Redis({
host: 'localhost',
port: 6379,
maxRetriesPerRequest: 3,
retryStrategy(times) {
return Math.min(times * 50, 2000);
}
});
// Работа с Sorted Set
await redis.zadd('leaderboard', 100, 'player:1', 250, 'player:2', 175, 'player:3');
const top = await redis.zrevrange('leaderboard', 0, 9, 'WITHSCORES');
console.log(top);
// ['player:2', '250', 'player:3', '175', 'player:1', '100']
// Pub/Sub (работает одинаково на Redis, Valkey, Dragonfly)
const sub = new Redis();
sub.subscribe('notifications', (err, count) => {
console.log(`Subscribed to ${count} channel(s)`);
});
sub.on('message', (channel, message) => {
console.log(`${channel}: ${message}`);
});
// Публикация из другого соединения
redis.publish('notifications', JSON.stringify({ event: 'user_signup', id: 42 }));
Docker Compose: запуск всех трёх для тестирования
# docker-compose.yml
version: '3.8'
services:
redis:
image: redis:8.0
ports:
- "6379:6379"
command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
valkey:
image: valkey/valkey:9.0
ports:
- "6380:6379"
command: valkey-server --io-threads 4 --io-threads-do-reads yes
dragonfly:
image: docker.dragonflydb.io/dragonflydb/dragonfly
ports:
- "6381:6379"
ulimits:
memlock: -1
command: dragonfly --maxmemory=256mb --proactor_threads=4
Когда выбрать Redis
Redis 8.0 остаётся оптимальным выбором в следующих сценариях:
- AI/ML-приложения — нативные vector sets, встроенный Query Engine для семантического поиска и RAG-пайплайнов. Ни Valkey, ни Dragonfly пока не предлагают аналогичной функциональности.
- Максимальная экосистема — Redis имеет наибольшее количество клиентских библиотек, интеграций, обучающих материалов и community-ресурсов. Если вы ищете ответ на Stack Overflow, скорее всего он про Redis.
- Redis Modules — если вам нужны time series, probabilistic data structures, JSON и поиск в одном пакете, Redis 8.0 предоставляет всё это из коробки.
- Существующая инфраструктура — если вы уже используете Redis Cloud или Redis Enterprise, обновление до 8.0 — наиболее простой путь.
- AGPLv3 совместимость — если ваша компания нормально относится к copyleft-лицензиям, Redis 8.0 под AGPLv3 полностью open source.
Когда выбрать Valkey
Valkey 9.0 — лучший выбор, когда:
- Лицензия критична — BSD 3-Clause не создаёт никаких ограничений. Для облачных провайдеров, SaaS-компаний и организаций с жёсткими юридическими требованиями это единственный полностью свободный вариант.
- Горизонтальное масштабирование — кластер до 2 000 нод и 1 миллиард RPS. Если вашему проекту нужен кластер из десятков и сотен нод, Valkey Cluster 9.0 — наиболее зрелое решение.
- Миграция с Redis — Valkey — прямой форк Redis, совместимость 99%+. Замена
redis-serverнаvalkey-serverв подавляющем большинстве случаев прозрачна. - Облачные сервисы — AWS ElastiCache, Amazon MemoryDB, Aiven, Google Cloud Memorystore используют Valkey. Если вы работаете в облаке, вероятно, вы уже используете Valkey.
- Community-driven развитие — проект управляется Linux Foundation с 346 активными контрибьюторами из 50 компаний, что гарантирует независимость от одного вендора.
Когда выбрать Dragonfly
Dragonfly 1.36 оптимален, когда:
- Вертикальное масштабирование — если у вас мощный сервер с 16–64+ ядрами, Dragonfly утилизирует все ядра, тогда как Redis/Valkey используют преимущественно одно. Одна нода Dragonfly может заменить несколько нод Redis.
- Экономия памяти — на 30–38% меньше памяти при хранении того же объёма данных. Снапшоты без fork() устраняют удвоение потребления памяти.
- CPU-интенсивные операции — сортированные множества, агрегации, полнотекстовый поиск. На 48-ядерном сервере Dragonfly показывает 29-кратное преимущество перед Valkey на ZADD.
- Замена Redis + Memcached — Dragonfly совместим с обоими протоколами, позволяя объединить два сервиса в один.
- Снижение количества нод — вместо кластера из 10 нод Redis/Valkey можно использовать 1–2 ноды Dragonfly, упрощая операционное обслуживание.
- BSL-совместимость — если вы не продаёте in-memory хранилище как сервис, BSL 1.1 не накладывает ограничений.
Миграция: практические рекомендации
С Redis на Valkey
Миграция максимально проста благодаря полной совместимости:
- Замените бинарный файл
redis-serverнаvalkey-server. - Конфигурационный файл совместим — переименуйте
redis.confвvalkey.conf(необязательно). - В клиентском коде замените библиотеку
redis-pyнаvalkey-py(или продолжайте использоватьredis-py— он работает с Valkey без изменений). - Протестируйте совместимость специфичных для вашего проекта команд.
С Redis на Dragonfly
- Замените
redis-serverнаdragonfly(тот же порт 6379, тот же RESP-протокол). - Клиентские библиотеки (
redis-py,ioredis,jedis) работают с Dragonfly без изменений. - Проверьте поддержку используемых команд — Dragonfly поддерживает 240+ команд, но не все (например, некоторые кластерные команды ограничены).
- Настройте
--proactor_threadsпод количество доступных ядер. - При использовании Lua-скриптов — протестируйте совместимость, так как реализация Lua в Dragonfly имеет незначительные отличия.
Заключение
Выбор между Redis, Valkey и Dragonfly в 2026 году определяется тремя факторами: лицензионные требования, архитектурные потребности и зрелость экосистемы.
Redis 8.0 — максимум функциональности (vector sets, Query Engine, time series, JSON) в одном пакете, но с лицензионными нюансами. Оптимален для AI/ML-задач и команд, которым нужна полная экосистема Redis Stack.
Valkey 9.0 — чистый open source (BSD), масштабируемый кластер до 2 000 нод, стремительно растущее сообщество. Де-факто стандарт в облачных сервисах AWS, Google Cloud и Aiven. Лучший выбор для горизонтального масштабирования и compliance-чувствительных проектов.
Dragonfly 1.36 — архитектурный прорыв с многопоточностью, 25-кратное превосходство в пропускной способности на мощном оборудовании, 30–38% экономии памяти. Идеален для вертикального масштабирования и замены кластеров Redis одной нодой.
Ни одно из трёх решений не является универсально лучшим. Но каждое из них — лучшее для определённого класса задач. Оцените свои требования по лицензии, масштабу и набору структур данных — и выбор станет очевидным.
Источники
- Redis 8 is now GA — Redis Blog — официальный анонс Redis 8.0 с описанием нововведений и бенчмарков.
- Valkey 9.0: innovation, features, and improvements — Valkey Blog — официальный анонс Valkey 9.0.
- Scaling a Valkey Cluster to 1 Billion Requests per Second — Valkey Blog — детали тестирования кластера из 2 000 нод.
- Dragonfly vs. Valkey Benchmark: 4.5x Higher Throughput on GCP — Dragonfly Blog — бенчмарк Dragonfly vs Valkey на Google Cloud.
- Redis 8.0 vs. Valkey 8.1: A Technical Comparison — Dragonfly Blog — детальное сравнение Redis и Valkey.
- Redis returns to open source with AGPL license — The Register — история лицензионных изменений Redis.
- Valkey vs Redis: How to Choose in 2025 — Better Stack — практическое руководство по выбору.