Redis умирает? Valkey, DragonflyDB и что дальше
В марте 2024 года Redis Ltd. сменила лицензию с BSD на RSALv2/SSPLv1 — то, что называют BSL (Business Source License). Это значит: Redis 7.4+ нельзя использовать в облачном сервисе без договора с Redis Ltd. Для большинства команд это не проблема. Но для AWS, GCP, Alibaba и всех, кто строит managed-сервисы поверх Redis, — это прямой запрет.
Реакция индустрии последовала быстро. Разбираемся, что сейчас происходит с экосистемой и какой путь выбрать.
Что произошло и почему это важно
Redis существовал под лицензией BSD с 2009 года. Это означало: берёшь код, используешь как угодно, даже строишь бизнес поверх него. Именно поэтому все крупные облака предлагали managed Redis — AWS ElastiCache, Google Memorystore, Azure Cache for Redis.
BSL меняет правила: исходный код открыт для чтения и модификации, но коммерческое использование как managed-сервиса требует лицензии от Redis Ltd. Через 4 года (в 2028) код переходит под Apache 2.0 — но это будущее, которое мало кого успокоило в моменте.
Через несколько дней после объявления Linux Foundation объявил о создании форка под названием Valkey. К проекту сразу присоединились AWS, Google, Oracle, Ericsson и ряд других. AWS ElastiCache и MemoryDB с тех пор работают на Valkey.
Valkey: форк с серьёзным бэкингом
Valkey — это наиболее прямой преемник Redis под открытой лицензией (BSD 3-Clause). Форк сделан от Redis 7.2.4 — последней BSD-версии. Основная цель: совместимость API 1-в-1, без сюрпризов при миграции.
Что изменилось с момента форка:
- Valkey 7.2 — совместим с Redis 7.2, drop-in замена
- Valkey 8.0 — первые собственные фичи: улучшенный I/O threading, multi-threaded command processing для read-heavy нагрузок
- Активная разработка: несколько десятков контрибьюторов от крупных компаний
# Миграция с Redis на Valkey — почти без изменений
# docker-compose.yml
services:
cache:
# image: redis:7.2-alpine # было
image: valkey/valkey:8.0-alpine # стало
ports:
- "6379:6379"
command: >
valkey-server
--save 60 1
--loglevel warning
volumes:
- valkey_data:/data
volumes:
valkey_data:
Клиентские библиотеки не меняются: redis-py, ioredis, Jedis — всё работает без изменений, потому что протокол RESP2/RESP3 идентичен. Это главное преимущество Valkey для существующих систем.
DragonflyDB: другой подход к архитектуре
DragonflyDB — это не форк Redis, а переосмысление in-memory хранилища с нуля. Написан на C++20, изначально multi-threaded. Redis использует single-threaded event loop — это исторически его главное ограничение на многоядерных серверах. DragonflyDB snared эту проблему через shared-nothing архитектуру: каждый поток работает с независимым набором slotов, без глобальных блокировок.
# Запуск DragonflyDB
docker run --rm -p 6379:6379 docker.dragonflydb.io/dragonflydb/dragonfly
# Проверка — те же команды, что и у Redis
redis-cli ping
# PONG
redis-cli set foo bar
# OK
redis-cli get foo
# "bar"
Официальные бенчмарки DragonflyDB показывают впечатляющие числа: до 25x throughput по сравнению с Redis на том же железе при использовании всех CPU-ядер. На практике — выигрыш реален, но зависит от профиля нагрузки. На простых GET/SET с небольшим числом клиентов Redis остаётся конкурентоспособным. DragonflyDB раскрывается при высоком параллелизме и сложных командах.
Совместимость: поддерживает большинство Redis-команд, но есть gaps — часть модулей (RedisSearch, RedisJSON в нативном виде) не поддерживается. Проверьте список команд перед миграцией.
KeyDB и Microsoft Garnet
KeyDB — форк Redis от компании Snap (Snapchat), разработанный ещё до смены лицензии. Основная фича: multi-threading через active replication. Snap использовал его для замены Redis в части своей инфраструктуры. В 2022 году Snap передал проект компании EQ Alpha Technology. Разработка продолжается, но темп замедлился. Для новых проектов KeyDB — не первый выбор: Valkey и DragonflyDB развиваются активнее.
Microsoft Garnet — исследовательский проект Microsoft Research, опубликованный в 2024 году. Написан на C#, оптимизирован под современные серверные CPU. Garnet совместим с RESP-протоколом, но это не production-ready drop-in замена — это скорее proof-of-concept для новых подходов к in-memory хранилищам. Интересен академически, но не для продакшн-миграции прямо сейчас.
Сравнение: кому что подходит
Критерий Valkey DragonflyDB KeyDB Garnet
────────────────────────────────────────────────────────────────────────────
Лицензия BSD 3-Clause BSL 1.1* BSD 3-Clause MIT
Redis API совместим. 100% ~95% ~98% ~85%
Multi-threading Частично (8.0) Да (нативно) Да Да
Модули (JSON, Search) Да Ограниченно Ограниченно Нет
Persistence (RDB/AOF) Да Да Да Частично
Managed cloud AWS, GCP, Azure Managed cloud Нет Нет
Матурность Высокая Средняя Средняя Низкая
Backing Linux Foundation Венчурный Snap/EQ Alpha Microsoft
────────────────────────────────────────────────────────────────────────────
* DragonflyDB BSL: production use разрешён, managed service — нет
Практика: как мигрировать
Если вы на самоуправляемом Redis 7.2 или ниже — у вас BSD-лицензия, никаких срочных действий не требуется. Если используете managed Redis в облаке — скорее всего провайдер уже переехал на Valkey под капотом.
Для активной миграции на Valkey:
import redis # redis-py работает с Valkey без изменений
# Подключение — идентично Redis
client = redis.Redis(
host="valkey-host",
port=6379,
db=0,
decode_responses=True,
)
# Все команды работают как раньше
client.set("session:abc123", '{"user_id": 42}', ex=3600)
value = client.get("session:abc123")
# Pub/Sub
pubsub = client.pubsub()
pubsub.subscribe("events")
# Pipeline (batch commands)
pipe = client.pipeline()
pipe.set("key1", "val1")
pipe.set("key2", "val2")
pipe.execute()
Для миграции данных из существующего Redis-инстанса:
# MIGRATE через встроенную команду Redis/Valkey
# На источнике (Redis):
redis-cli --pipe-mode # для bulk transfer
# Альтернатива — через DUMP/RESTORE или redis-riot
# redis-riot: утилита для миграции между Redis-совместимыми хранилищами
redis-riot replicate \
--source-uri redis://old-redis:6379 \
--target-uri redis://new-valkey:6379 \
--live # режим живой репликации во время миграции
Если планируете переход на DragonflyDB — сначала проверьте совместимость команд, которые вы используете. Критичные точки: Lua-скрипты (поддерживаются, но с ограничениями), Cluster mode (поддерживается), Redis модули (не поддерживаются).
Redis как open-source проект умер в марте 2024 — это факт. Но экосистема не умерла: Valkey — это тот же Redis под правильной лицензией с корпоративным бэкингом. DragonflyDB — интересная альтернатива, если вам нужна производительность на многоядерных серверах. Для большинства существующих систем правильный ответ один: мигрируйте на Valkey, поменяйте одну строчку в docker-compose, и живите спокойно.