Начиная с выпуска 7.4 СУБД Redis перешла на использование лицензий RSALv2 (Redis Source Available License v2) и SSPLv1 (Server Side Public License v1), которые приводят к дискриминации отдельных категорий пользователей, что не позволяет считать их открытыми или свободными. По своим целям обе лицензии походят друг на друга, а отличия сводятся к тому, что лицензия SSPL основана на копилефт лицензии AGPLv3, а лицензия RSAL основана на пермиссивной лицензии BSD. Лицензия RSAL позволяет использовать, изменять, распространять и интегрировать код в приложения, за исключением случаев, когда эти приложения являются коммерческими или используются для предоставления управляемых платных сервисов. Лицензия SSPL дополнительно содержит требование поставки под той же лицензией не только кода самого приложения, но и исходных текстов всех компонентов, вовлечённых в предоставление облачного сервиса.
СУБД Valkey и Redis предоставляют функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. БД хранится в памяти и синхронизируется с версией на диске или отражается в логе изменений на диске, что гарантирует сохранность данных в случае аварийного завершения работы. Поддерживаются транзакции, режим «публикация/подписка», команды для инкремента/декремента, операции над списками и множествами (объединение, пересечение), переименование ключей, master-slave репликация, множественные выборки и функции сортировки.
В новой версии:
- Полностью переписана реализация хэш-таблицы, используемой как в основном хранилище данных в формате ключ-значение, так и при хранении данных с типами «Hash», «Set» и «Sorted Set». Новый вариант отличается уменьшением потребления памяти и снижением числа операций случайного доступа к памяти. Для каждой пары ключ-значение без TTL (ограничение времени жизни объекта) потребление памяти снижено на 20 байт, а с TTL — на 30 байт. Пропускная способность увеличилась примерно на 10% при работе не в режиме многопоточного ввода/вывода.
- Добавлена поддержка упреждающей загрузки из памяти (prefetching) при выполнении операции перебора ключей, применяемой, например, при выполнении команды KEYS или при отправке всех ключей на новый узел в кластере при репликации. Благодаря данной оптимизации удалось ускорить перебор ключей в 3.5 раза, так как при переходе к обработке следующего ключа, он теперь оказывается загружен в кэш CPU.
- Продолжен перевод компонентов на многопоточную обработку ввода/вывода. Добавлена возможность использования отдельных потоков ввода/вывода при согласовании TLS-соединений, что в три раза повысило производительность приёма новых соединений. В отдельные потоки также вынесены вызовы функций SSL_pending() и ERR_clear_error(), что привело к повышению пропускной способности при выполнении операций SET на 10%, а GET — на 22%.
- Повышена эффективность репликации. Удаление излишних вычислений контрольных сумм при бездисковой репликации на 18% ускорило выполнение полной синхронизации при включённом TLS. Накладные расходы при выполнении операций copy-on-write сокращены на 47%.
- Оптимизирована реализация сортированных списков (тип данных «sorted set»), выполнение команды ZRANK для которых стало выполняться на 45% быстрее. В реализации команды ZADD задействованы SIMD-инструкции.
- Сокращено потребление памяти при подсчёте уникальных элементов с использованием вероятностного типа hyperloglog (независимо от размера данных теперь требуется лишь 12 КБ памяти). Благодаря задействованию инструкций AVX2 на системах x86 производительность операций PFMERGE и PFCOUNT с типами данных hyperloglog возросла до 12 раз, а операции BITCOUNT до 5 раз.
- В систему активной дефрагментации внесены изменения, предотвращающие появление задержек, длительностью более 1 миллисекунды. Время каждого цикла дефрагментации сокращено до 500 микросекунд. Добавлен механизм (anti-starvation), предотвращающий задержку выполнения операций, таких как цикл дефрагментации, из-за выполнения длительно работающих команд.
- Добавлены новые настройки форматирования логов и отображения времени в логах. Добавлен режим COMMANDLOG для отражения в логе больших запросов и ответов (по аналогии с сохранением длительно выполняемых запросов).
- В команду «LATENCY LATEST», применяемую для анализа задержек, добавлены дополнительные метрики со сведениями о числе зарегистрированных задержек и всплесках задержек.
- Добавлена поддержка операции «SET IFEQ», выполняемой если заданное в сравнении значение соответствует текущему значению ключа.
- Добавлена поддержка создания новых скриптовых движков в виде модулей, что позволяет реализовать поддержку языков, отличных от Lua.
- Представлены новые модули:
- Search Module — движок для векторного поиска похожих значений, оптимизированный для задач машинного обучения, в которых необходимы низкие задержки и высокая пропускная способность. Модуль предоставлен компанией Google.
- JSON Module — реализация типа данных JSON, позволяющая обращаться к частям JSON-документов без их полной обработки на клинтской стороне. Модуль предоставлен компанией AWS.
- Probabilistic Bloom Filter Module — реализация фильтров Блума, вероятностной структуры для проверки вхождения во множество, допускающей ложное определение отсутствующего элемента, но исключающая пропуск существующего элемента. Модуль предоставлен компанией AWS.
Источник: http://www.opennet.ru/opennews/art.shtml?num=63023