1. Что случилось с Redis
Redis существовал с 2009 года под лицензией BSD — свободной и без ограничений. В марте 2024 компания Redis Ltd. изменила лицензию для всех новых версий, начиная с Redis 7.4:
| Версия Redis | Лицензия | Статус |
|---|---|---|
| Redis ≤ 7.2 | BSD 3-Clause | ✅ Open-source |
| Redis 7.4 – 7.x | RSALv2 + SSPLv1 | ❌ Проприетарная |
| Redis 8+ | RSALv2 + SSPLv1 + AGPLv3 | ⚠️ Частично открытая |
| Valkey 7.2+ | BSD 3-Clause | ✅ Open-source (Linux Foundation) |
SSPL (Server Side Public License) — лицензия, которую OSI не признаёт открытой. Она обязывает раскрывать весь код инфраструктуры, если вы предоставляете Redis как облачный сервис. Именно поэтому AWS и Google перестали предлагать Redis последних версий.
Что изменилось в Redis 8
В конце 2024 года Redis добавил AGPLv3 как третий вариант лицензии — формально вернувшись в open-source. Но AGPLv3 требует открывать изменения при SaaS-использовании, а главное — репутация уже подорвана. 83% крупных компаний успели мигрировать на Valkey или тестируют его.
1 апреля 2024 Linux Foundation объявила о форке Redis 7.2.4 под названием Valkey. Проект поддержали AWS, Google Cloud, Oracle, Alibaba, Ericsson, Huawei и Tencent. За несколько недель — 150+ контрибьюторов, 1000+ коммитов, production-ready релиз.
2. Что такое Valkey
Valkey — это high-performance in-memory key-value хранилище, fork Redis 7.2. Полная совместимость по протоколу, командам и типам данных — плюс собственные улучшения производительности. Актуальная версия — Valkey 8.1.
⚡ Async I/O (Valkey 8.0)
Сетевые операции вынесены в отдельные потоки. На 16 ядрах — 1,19 млн req/sec (230% быстрее v7.2).
🔓 BSD 3-Clause лицензия
Настоящий open-source без ограничений. Linux Foundation гарантирует, что лицензия не изменится снова.
🔄 Полная совместимость
Те же команды, порт 6379, протокол RESP. Любой Redis-клиент работает без изменений кода.
💾 Меньше памяти
При 50M ключей Valkey 8.1 потребляет на 28% меньше RAM, чем Redis 8.2 (3,77 ГБ vs 4,83 ГБ).
🐳 Docker-образ
Официальный образ valkey/valkey:8. Drop-in замена image: redis в любом docker-compose.yml.
🐧 В Ubuntu 24.04
Valkey включён в официальные репозитории Ubuntu 24.04 LTS и 24.10. Устанавливается через apt.
Производительность: Valkey 8.1 vs Redis 8.0
+37%
скорость SET
+16%
скорость GET
−28%
расход RAM
3. Установка через Docker
Docker — рекомендуемый способ для Ubuntu 22.04 и любого дистрибутива. Данные хранятся в именованном volume и сохраняются при обновлении контейнера.
Установить Docker (если ещё нет)
curl -fsSL https://get.docker.com | shЗапустить Valkey одной командой
Самый быстрый способ — без Compose, просто чтобы проверить:
docker run -d \
--name valkey \
-p 127.0.0.1:6379:6379 \
valkey/valkey:8
# Проверить работу:
docker exec -it valkey valkey-cli ping
# → PONGЧерез Docker Compose (рекомендуется)
services:
valkey:
image: valkey/valkey:8
container_name: valkey
restart: always
ports:
- "127.0.0.1:6379:6379"
volumes:
- valkey-data:/data
command: valkey-server --requirepass "СЛОЖНЫЙ_ПАРОЛЬ" --appendonly yes
volumes:
valkey-data:mkdir ~/valkey && cd ~/valkey
# создайте docker-compose.yml с содержимым выше, затем:
docker compose up -d
# Проверить:
docker exec -it valkey valkey-cli -a "СЛОЖНЫЙ_ПАРОЛЬ" ping
# → PONGПараметры в команде valkey-server
--requirepass— пароль для аутентификации (обязательно на продакшне)--appendonly yes— AOF-персистентность: данные не теряются при рестарте
4. Установка напрямую (Ubuntu 24.04)
На Ubuntu 24.04 LTS Valkey доступен прямо из официальных репозиториев — пакет находится в Universe:
sudo apt update
sudo apt install -y valkey valkey-toolsПосле установки Valkey автоматически запускается как systemd-сервис:
# Статус
sudo systemctl status valkey
# Запустить / перезапустить / остановить
sudo systemctl start valkey
sudo systemctl restart valkey
sudo systemctl stop valkey
# Автозапуск (включён по умолчанию)
sudo systemctl enable valkey
# Проверить подключение
valkey-cli ping
# → PONGUbuntu 22.04
В Ubuntu 22.04 Valkey в стандартных репозиториях недоступен. Используйте Docker (раздел выше) — это удобнее и проще для обновления.
5. Пароль и базовая настройка
По умолчанию Valkey слушает на 127.0.0.1:6379 и не требует пароля. Если сервер доступен извне — установите пароль.
Настройка через valkey.conf (apt-установка)
Конфиг находится в /etc/valkey/valkey.conf. Ключевые параметры:
# Слушать только localhost (безопасно по умолчанию)
bind 127.0.0.1
# Пароль обязателен, если сервер доступен из сети
requirepass "СЛОЖНЫЙ_ПАРОЛЬ_МИНИМУМ_32_СИМВОЛА"
# Персистентность: сохранять данные на диск
appendonly yes
appendfsync everysec
# Лимит памяти (например, 256 МБ)
maxmemory 256mb
maxmemory-policy allkeys-lrusudo systemctl restart valkeymaxmemory-policy
Определяет, что делать когда память заполнена:
allkeys-lruудалять наименее используемые ключи (для кэша — оптимально)volatile-lruудалять только ключи с TTLnoevictionвозвращать ошибку при попытке записи (для очередей и сессий)6. Docker Compose с приложением
Типичный сценарий — запустить Valkey вместе с веб-приложением. Пример с Node.js/Next.js приложением и Valkey как кэш-сервером:
services:
app:
build: .
restart: always
ports:
- "127.0.0.1:3000:3000"
environment:
REDIS_URL: redis://:{VALKEY_PASSWORD}@valkey:6379
depends_on:
valkey:
condition: service_healthy
valkey:
image: valkey/valkey:8
container_name: valkey
restart: always
volumes:
- valkey-data:/data
command: valkey-server --requirepass "{VALKEY_PASSWORD}" --appendonly yes
healthcheck:
test: ["CMD", "valkey-cli", "-a", "{VALKEY_PASSWORD}", "ping"]
interval: 10s
timeout: 5s
retries: 3
volumes:
valkey-data:VALKEY_PASSWORD=длинный_случайный_пароль_здесьdocker compose up -dПодключение из приложения
Любой Redis-клиент работает с Valkey без изменений:
import Redis from 'ioredis'
const redis = new Redis(process.env.REDIS_URL)
await redis.set('key', 'value', 'EX', 3600) // TTL 1 час
const value = await redis.get('key')import redis
r = redis.from_url(os.environ['REDIS_URL'])
r.set('key', 'value', ex=3600) # TTL 1 час
value = r.get('key')$client = new Predis\Client(getenv('REDIS_URL'));
$client->set('key', 'value');
$client->expire('key', 3600);
$value = $client->get('key');Замена Redis в Nextcloud, Gitea, n8n
В docker-compose.yml этих приложений замените image: redis на image: valkey/valkey:8 — больше ничего менять не нужно. Порт, переменные и протокол идентичны.
7. Миграция с Redis
Valkey совместим с Redis вплоть до версии 7.2. Если вы используете Redis 7.2 или старше — миграция прозрачна. Redis 7.4 и выше несовместимы с Valkey.
Способ 1: горячая замена (downtime ~1 мин)
Самый простой вариант — сделать RDB-дамп и загрузить в Valkey. Подходит если данные в Redis некритичны или легко восстанавливаются.
# Создать дамп
redis-cli -a "REDIS_PASSWORD" BGSAVE
# Найти файл дампа
redis-cli -a "REDIS_PASSWORD" CONFIG GET dir
# Обычно /var/lib/redis/dump.rdb# Остановить Valkey
docker compose stop valkey
# Скопировать dump.rdb в volume (для Docker)
docker run --rm -v valkey-data:/data -v /tmp:/backup \
alpine cp /backup/dump.rdb /data/dump.rdb
# Запустить Valkey — он загрузит dump.rdb автоматически
docker compose start valkey
# Проверить количество ключей
docker exec -it valkey valkey-cli -a "ПАРОЛЬ" DBSIZEСпособ 2: через репликацию (без простоя)
Настройте Valkey как реплику Redis, дождитесь полной синхронизации, затем переключите приложение.
# Valkey реплицирует данные с Redis-мастера
replicaof REDIS_HOST 6379
masterauth "REDIS_PASSWORD"
requirepass "VALKEY_PASSWORD"# Продвинуть Valkey в мастера (на Valkey-сервере):
valkey-cli -a "VALKEY_PASSWORD" REPLICAOF NO ONE
# Переключить приложение на Valkey, затем выключить RedisПроверить совместимость перед миграцией
# Версия текущего Redis
redis-cli -a "ПАРОЛЬ" INFO server | grep redis_version
# Все команды, которые вызывались (нужен slowlog или monitor)
redis-cli -a "ПАРОЛЬ" COMMAND COUNT
# Посмотреть используемые типы данных
redis-cli -a "ПАРОЛЬ" DEBUG SLEEP 0Что не поддерживается в Valkey
- — Redis 7.4+ функции (RedisJSON, RedisSearch и другие модули Redis Ltd.)
- — Команды специфичные для Redis Enterprise
- — Redis 7.4+ Cluster протокол (несовместим)
Стандартные команды Redis 7.2 и ниже работают без изменений.