Valkey - это открытый форк Redis, созданный под крылом Linux Foundation в марте 2024 года на основе Redis 7.2.4 после того, как Redis сменил лицензию. Для приложения это одно и то же: тот же протокол, те же команды, те же директивы конфигурации, тот же порт по умолчанию 6379 и те же клиентские библиотеки - ваш клиент Redis подключается к Valkey без изменений в коде. После форка они разошлись в возможностях, добавленных после 7.2, и в лицензировании, из-за которого форк и существует. Если вы используете Redis как кэш, хранилище сессий, очередь или ограничитель частоты запросов, на Valkey можно перейти, ничего не заметив. Если вы зависите от чего-то, что появилось в Redis после 7.2, например от модулей, вошедших в Redis 8, проверьте всё перед переездом.
Что произошло: смена лицензии#
Redis выпускался под трёхпунктовой лицензией BSD с 2009 года, и большую часть его жизни на этом история и заканчивалась. В 2018 году Redis Ltd перевела часть своих дополнительных модулей на более строгие лицензии, а ядро осталось под BSD. В марте 2024 года изменилось и ядро.
| Дата | Событие |
|---|---|
| 2009 | Сальваторе Санфилиппо выпускает Redis под BSD-3-Clause |
| 20 марта 2024 | Redis Ltd объявляет, что начиная с Redis 7.4 действует двойная лицензия RSALv2 и SSPLv1 |
| 28 марта 2024 | Linux Foundation объявляет о Valkey - форке Redis 7.2.4, который остаётся на BSD-3-Clause |
| Апрель 2024 | Valkey 7.2.5, первый релиз, прямая замена Redis 7.2 |
| Сентябрь 2024 | Valkey 8.0, первый релиз с существенными собственными изменениями |
| 31 марта 2025 | Valkey 8.1 с новой, более экономной по памяти хеш-таблицей |
| Май 2025 | Redis 8.0 добавляет AGPLv3 как третий вариант лицензии |
| 21 октября 2025 | Valkey 9.0 со сроком жизни полей хешей и несколькими базами в режиме кластера |
Обе лицензии 2024 года - Redis Source Available License v2 и Server Side Public License v1 - не являются одобренными лицензиями открытого ПО. На практике они запрещают предлагать Redis как управляемую услугу в конкуренции с Redis Ltd, а именно этим и занимались крупные облачные провайдеры. Ответом стал Valkey: мейнтейнеры, работавшие над Redis в этих компаниях, форкнули последний релиз под BSD, а среди первых, кто его поддержал, были Amazon Web Services, Google Cloud, Oracle, Ericsson и Snap.
Добавление AGPLv3 в 2025 году снова делает Redis 8 открытым ПО в обычном смысле слова. AGPL - копилефт-лицензия с сетевым условием: если вы изменяете сам Redis и даёте пользователям работать с ним по сети, вы обязаны предложить им свой изменённый исходный код. Для тех, кто использует Redis без изменений как компонент, это меняет очень немногое, но у многих компаний есть общие запреты на код под AGPL, а у форка к тому моменту была фора в год.
Что лицензии означают для тех, кто действительно пользуется этим ПО:
- Запуск за собственным приложением - кэш, хранилище сессий, очередь - разрешён при любой лицензии, под которой когда-либо выходил Redis, включая RSALv2 и SSPLv1. Никто не просит вас платить за подключение к Redis.
- Изменение сервера и запуск изменённой версии - тот случай, когда AGPLv3 просит опубликовать ваши изменения для пользователей этого сервиса. Использование без изменений ничего от вас не требует.
- Продажа самого Redis как услуги - именно то, чему должны были помешать RSALv2 и SSPLv1, и причина, по которой провайдеры, занимающиеся этим, перешли на Valkey.
- Распространение в составе дистрибутива Linux или продукта проще всего под BSD, поэтому дистрибутивы и предпочли форк.
Итак, для разработчика, который запускает один экземпляр за приложением, всё это лицензирование никак не влияет на то, что ему разрешено. Оно важно компаниям, строящим хостинговые сервисы, и дистрибутивам Linux, решающим, что поставлять. Fedora, например, заменила свой пакет Redis на Valkey.
Что такое Valkey#
Valkey - проект Linux Foundation с открытой моделью управления, техническим руководящим комитетом из представителей нескольких компаний и лицензией BSD-3-Clause, которую не может изменить один поставщик. Его исполняемые файлы называются valkey-server, valkey-cli, valkey-benchmark, valkey-check-aof и valkey-check-rdb, файл конфигурации - valkey.conf, а большинство пакетов также устанавливают совместимые имена, чтобы скрипты, вызывающие redis-cli, продолжали работать.
Проект не стоял на месте. Главные изменения после форка:
- 8.0 переработал многопоточный ввод-вывод, чтобы один экземпляр мог использовать несколько ядер для работы с сетью, добавил двухканальную репликацию и метрики по слотам в режиме кластера.
- 8.1 заменил основной словарь на хеш-таблицу, более эффективную по кэшу процессора и памяти, и сократил накладные расходы на ключ.
- 9.0 добавил срок жизни отдельных полей хешей (
HEXPIRE,HTTLи родственные команды), атомарную миграцию слотов в режиме кластера и нумерованные базы данных в режиме кластера.
Модули для JSON, фильтров Блума и поиска существуют как отдельные проекты Valkey (valkey-json, valkey-bloom, valkey-search) и распространяются вместе с сервером в виде комплекта, а не встроены в него.
Что такое Redis сейчас#
Redis 8 влил в основной дистрибутив то, что раньше было Redis Stack, - JSON-документы, движок запросов и поиска, временные ряды и вероятностные структуры вроде фильтров Блума - и добавил тип данных vector set. Если вы пользуетесь чем-то из этого, в Redis 8 это часть ядра, а в Valkey по умолчанию этого нет.
В Redis 7.4 также появился срок жизни полей хешей, который Valkey добавил в 9.0, а Redis 8 добавил вокруг него новые команды. Оба проекта продолжают добавлять команды, и пересечение после 7.2 частичное: некоторые возможности появились в обоих под одинаковыми именами, некоторые есть только в одном. Для всего, что новее 7.2, сверяйтесь со страницей документации команды для того сервера, который вы запускаете, а не предполагайте.
Совместимость на практике#
Что одинаково и останется одинаковым, потому что оба проекта считают это контрактом:
- Протокол. RESP2 и RESP3, то же кадрирование, то же согласование через
HELLO. - Все команды, существовавшие в Redis 7.2 - строки, хеши, списки, множества, сортированные множества, потоки, pub/sub, транзакции с
MULTIиEXEC, скрипты на Lua черезEVAL, функции черезFCALL,ACL,CLIENT,CONFIG,INFO. - Конфигурация.
valkey.confпринимает те же директивы, что иredis.conf, -maxmemory,maxmemory-policy,appendonly,save,requirepassи остальные. - Файлы сохранения. Valkey читает снимки RDB и append-only файлы, записанные Redis 7.2 и более ранними версиями.
Одна намеренная деталь помогает старым клиентам: вывод INFO server в Valkey по-прежнему содержит redis_version:7.2.4, а рядом - server_name:valkey и valkey_version с настоящей версией. Клиентские библиотеки, которые проверяют версию сервера перед использованием какой-то возможности, видят понятное им число.
$ valkey-cli -h db.example.net -p 6379 --askpass INFO server | grep -E 'version|server_name'redis_version:7.2.4server_name:valkeyvalkey_version:8.1.1Осторожность нужна с данными, записанными Redis 7.4 и новее. Их формат снимков может оказаться новее, чем умеет читать конкретный релиз Valkey, поэтому прежде чем загружать файл дампа Redis 7.4+, сверьтесь с примечаниями к релизу Valkey или переносите данные на уровне команд, как описано ниже.
Клиенты и библиотеки#
Лицензию клиентских библиотек никто не менял - это отдельные проекты, в основном под MIT, - и все они общаются с Valkey без изменений.
| Язык | Давние клиенты Redis | Варианты под брендом Valkey |
|---|---|---|
| Python | redis-py | valkey-py (форк), Valkey GLIDE |
| Node.js | ioredis, node-redis | iovalkey (форк ioredis), Valkey GLIDE |
| Java | Jedis, Lettuce, Redisson | valkey-java, Valkey GLIDE |
| Go | go-redis | valkey-go, Valkey GLIDE |
| .NET | StackExchange.Redis | - |
| PHP | phpredis, Predis | - |
Valkey GLIDE - собственный клиент проекта с общим ядром на Rust и привязками для нескольких языков. Для нового проекта это хороший выбор, для существующего - ненужная перемена. Фреймворки, работающие поверх этих клиентов, - Sidekiq, BullMQ, Celery, кэш-бэкенд Django, драйвер Redis в Laravel, Spring Data Redis - работают через нижележащий клиент, и им всё равно, какой сервер отвечает.
Строка подключения тоже та же: redis://:password@host:port/0 или rediss:// для TLS. Некоторые клиенты под брендом Valkey принимают и valkey://, но форма redis:// работает везде, и именно её ждут файлы конфигурации. Подключение и первые команды описаны в статье Valkey: первые шаги.
Переезд с Redis на Valkey#
Как переезжать, зависит от того, что это за данные.
Кэш. Не переносите его. Направьте приложение на новый сервер и дайте ему заполниться. Первые минуты придётся работать с холодным кэшем, так что делайте это вне часов пик, а если холодный кэш перегрузит вашу базу данных, сначала прочитайте раздел о лавине промахов в статье паттерны кэширования с Valkey.
Сессии и очереди. Обычно они достаточно короткоживущие, чтобы их не копировать, а дать им иссякнуть: перестаньте ставить задачи на старом сервере, дайте исполнителям закончить, переключитесь и смиритесь с тем, что пользователям с сессией на старом сервере придётся войти ещё раз.
Данные, которые нужно сохранить. С Redis 7.2 и более ранних версий самый чистый путь - реплика: запустите Valkey, выполните REPLICAOF old-host 6379 (с заданным masterauth, если у источника есть пароль), дождитесь окончания синхронизации, затем повысьте его командой REPLICAOF NO ONE и перенаправьте приложение. Если новый сервер не может достучаться до старого, копируйте ключ за ключом через SCAN, DUMP и RESTORE - так сохраняются типы и TTL:
import redissrc = redis.Redis(host="old-host", port=6379, password="old-pass")dst = redis.Redis(host="new-host", port=6379, password="new-pass")for key in src.scan_iter(count=1000): payload = src.dump(key) if payload is None: continue # expired between SCAN and DUMP ttl = src.pttl(key) dst.restore(key, ttl if ttl > 0 else 0, payload, replace=True)DUMP выдаёт данные в формате сериализации исходной версии, поэтому так можно переносить с Redis 7.2 и более ранних. С Redis 7.4 или 8 используйте инструмент, который читает значения обычными командами и записывает их заново, или пусть приложение само перестроит то, что ему нужно.
Перед переключением выполните на старом сервере INFO server и MODULE LIST. Модуль в этом списке - ReJSON, search, timeseries - это зависимость, которую нужно решить в первую очередь.
Производительность: что на самом деле отличается#
Бенчмарки, сравнивающие эти два сервера, в основном публикуют люди, заинтересованные в результате, и большинство из них измеряют большую машину, разогнанную до миллионов запросов в секунду. Несколько отличий реальны, и полезно знать, какие из них важны в масштабах, в которых работает большинство приложений.
Выполнение команд однопоточное в обоих. Каждая команда выполняется до конца, прежде чем начнётся следующая, и именно это делает INCR атомарным, а скрипты Lua безопасными без блокировок. Ни один проект этого не менял и не изменит, потому что на этом держится вся модель программирования. Распределять по потокам оба умеют сетевую работу вокруг команд: чтение запросов из сокетов, их разбор и запись ответов. Redis добавил многопоточный ввод-вывод в версии 6; Valkey 8 существенно его переработал, так что один экземпляр Valkey на нескольких ядрах обслуживает гораздо больше подключений и запросов, прежде чем основной поток станет пределом. В обоих это управляется директивой io-threads, и помогает это, только когда есть свободные ядра и много одновременных клиентов.
Память на ключ в Valkey 8.1 уменьшилась. Новая хеш-таблица хранит ключи с меньшими накладными расходами. Набор данных из нескольких больших значений этого не заметит; набор из миллионов мелких ключей - идентификаторов сессий, счётчиков ограничения частоты, записей кэша по несколько десятков байт - заметно лучше помещается в тот же объём памяти. На небольшом экземпляре, где пределом, в который вы на самом деле упираетесь, является память, это и есть улучшение, о котором стоит думать.
В малых масштабах всё решают сетевые обращения. Для приложения, которое отправляет несколько сотен команд в секунду, внутренняя скорость сервера не имеет значения: каждая команда стоит одного сетевого обращения туда и обратно, и время уходит именно туда. Конвейерная отправка нескольких команд за одно обращение, MGET вместо цикла из GET и открытые соединения в пуле дают для задержки больше, чем любой выбор между двумя серверами. valkey-benchmark (или redis-benchmark, который работает с обоими) измеряет, что выдают ваш собственный сервер и сеть, а это единственный бенчмарк, который к вам относится:
$ valkey-benchmark -h db.example.net -p 6379 -a "$PASS" -t set,get -n 100000 -q$ valkey-benchmark -h db.example.net -p 6379 -a "$PASS" -t set,get -n 100000 -P 16 -qВторая строка отправляет конвейером по шестнадцать команд за обращение. Разница между двумя результатами обычно оказывается самым убедительным аргументом в пользу конвейеров, какой вы когда-либо увидите.
Что выбрать#
Для большинства приложений это не важно, и решает то, что предлагает ваша платформа. Выбирайте Valkey, если вам нужен сервер под BSD с управлением от нескольких поставщиков или если именно его предоставляет ваш дистрибутив или хостинг. Выбирайте Redis 8, если вам нужны его встроенные возможности для JSON, поиска, временных рядов или векторов в одном сервере и вас устраивает AGPL. В любом случае по возможности пишите код приложения под набор команд Redis 7.2, и он будет годами работать на обоих.
Обычно важнее вопрос не «какой», а нужен ли вам вообще хоть один из них - об этом статья Redis: когда он нужен, - и сколько памяти и какое сохранение данных нужно задаче.
Valkey на RE:NODE#
В линейке баз данных есть Valkey, а не Redis, и называется он так намеренно. Он говорит на протоколе Redis, так что любой клиент или библиотека Redis подключаются к нему без изменений. Каждый сервер защищён паролем со сгенерированными для него учётными данными и доступен по хосту и порту, указанным для тарифа; слота прокси нет, приложение подключается напрямую. Данные сохраняются на диск и через AOF, и снимками, так что перезапуск их не стирает. Тарифы начинаются с 256 МБ памяти и доходят до 4 ГБ. Статья какую базу данных выбрать ставит его рядом с линейками PostgreSQL, MySQL, MongoDB и SQL Server.
FAQ#
Является ли Valkey прямой заменой Redis?
Для Redis 7.2 и более ранних - да: тот же протокол, команды, конфигурация и форматы файлов. Приложения, использующие возможности, добавленные в Redis 7.4 или 8, - например, влитые модули JSON, поиска и временных рядов, - перед переключением нужно проверить команда за командой.
Нужно ли менять клиентскую библиотеку Redis?
Нет. redis-py, ioredis, node-redis, Jedis, Lettuce, go-redis, StackExchange.Redis и phpredis подключаются к Valkey как есть. Форки под брендом Valkey и клиент GLIDE существуют, но переходить на них не обязательно.
Redis снова открытый?
Начиная с Redis 8 в 2025 году Redis можно использовать под AGPLv3 - одобренной OSI лицензией открытого ПО - как альтернативой RSALv2 и SSPLv1. Redis 7.4 выходил только под двумя лицензиями source-available. Valkey всё это время оставался на BSD-3-Clause.
Почему Valkey сообщает redis_version 7.2.4?
Ради совместимости. Некоторые клиентские библиотеки проверяют версию сервера перед использованием какой-либо возможности, и им известны номера версий Redis. Valkey продолжает сообщать в этом поле версию, от которой он ответвился, а свою собственную версию сообщает отдельно как valkey_version.
Может ли Valkey прочитать мой файл dump.rdb от Redis?
Файлы, записанные Redis 7.2 и более ранними версиями, - да. Файлы от Redis 7.4 и новее могут использовать более новый формат; сверьтесь с примечаниями к релизу для вашей версии Valkey или переносите данные на уровне команд вместо копирования файла.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.