Valkey 9.1: до 20% экономии памяти, ACL на уровне баз и команда CLUSTERSCAN

Форк Redis под крылом Linux Foundation выпустил версию 9.1: короткие строки занимают на 20% меньше памяти, появились права доступа с гранулярностью до отдельной БД и единая команда обхода ключей по всему кластеру.

DB
DBG · по материалам Valkey Blog
0

19 мая команда Valkey выпустила версию 9.1. Главное, ради чего этот релиз стоит смотреть тем, кто платит за оперативную память в облаке: разработчики переработали внутреннее хранение данных. Строки короче 128 байт теперь занимают до 20% меньше памяти, а sorted set'ы — до 10% меньше за счёт оптимизаций скип-листа. Для кэша сессий или счётчиков, где миллионы мелких ключей, это прямая экономия на инстансах. Заодно подняли пропускную способность — в замерах проекта фигурирует цифра 2,1 млн запросов в секунду.

Вторая крупная вещь — ACL с гранулярностью до базы. Раньше права пользователя действовали на весь инстанс; теперь можно ограничить набор команд конкретными номерами БД: ACL SETUSER app-user on >secretpass +@all ~* db=0,1. Это закрывает типовой сценарий, когда на одном Valkey живут несколько сервисов и разделены они только договорённостью «не лезь в чужую db». Плюс к этому — автоматическая фоновая перезагрузка TLS-сертификатов без рестарта и вывод даты истечения сертификата прямо в INFO.

Из нового в API — команда CLUSTERSCAN: единый обход ключей по всему кластеру с поддержкой паттернов, фильтрации по типу и по конкретным слотам. До неё клиенту приходилось самостоятельно ходить SCAN по каждому узлу и склеивать результат, что регулярно ломалось при решардинге. Добавили также HGETDEL и MSETEX, вынесли Lua-движок в модульную архитектуру и научили сервер писать логи в JSON (log-format json) — то, чего давно не хватало для Loki и ELK. Отдельно появились метрики загрузки main- и IO-потоков.

Что делать практикующему разработчику. Если вы сидите на Redis 7.2 или Valkey 8.x, апгрейд имеет смысл начинать с dev-контура: протокол и команды обратносовместимы, но модульный Lua и новый формат логов — те места, где чаще всего вылезают сюрпризы в самописных скриптах и парсерах логов. Проверьте три вещи. Первое: если у вас мультитенантный инстанс, перепишите ACL под db= — это единственный способ реально изолировать сервисы без отдельных подов. Второе: замените в коде связку HGET + HDEL на HGETDEL, это убирает гонку между чтением и удалением. Третье: если Valkey крутится в Kubernetes с cert-manager, автоперезагрузка сертификатов позволяет наконец выкинуть костыль с рестартом пода по ротации — но убедитесь, что путь к сертификату в конфиге указывает на симлинк, который обновляет cert-manager, иначе фоновая перезагрузка просто не увидит новый файл.

Комментарии