← все статьи
7 мин

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, и живите спокойно.

← все статьи Следующая →Observability: метрики, логи, трейсы