Redis Ltd has announced an update to the licensing policy of the project. Starting with the release of Redis 8.0, the project's code has become available under the AGPLv3 open license. This shift to an open license was made possible by the return of Salvatore Sanfilippo, the creator of the Redis database, to the company. After leaving Redis Ltd, Salvatore developed a set of vector extensions (Vector Sets) that he was ready to contribute to Redis, but he wanted the code he created to be released under an open license. Salvatore was able to persuade his colleagues of the merits of restoring the open nature of the project and improving community engagement.
Rowan Trollope, the director of Redis Ltd, stated that the transition to proprietary licenses made last year achieved its goal, as AWS and Google have established a fork, begun participating in collaborative development, and sharing their past contributions. However, the change in licensing harmed the company's relationships with the community, which it is now trying to rebuild by returning to supplying the code under an open license.
After the transition to proprietary licenses, the development of the open codebase of Redis continued in forks such as Valkey (a fork developed with the involvement of Amazon, Google, Oracle, Ericsson, and Snap), Redict (a fork by the author of the Sway user interface and the Hare language), Garnet (a Microsoft database compatible with Redis), and KeyDB (a high-performance fork of Redis 5 by Snapchat). In the repositories for Debian 13, Ubuntu 24.10, Fedora 41, RHEL 10, Azure Linux 3, Arch Linux, and Alpine 3.20, the Redis package has been replaced with the Valkey fork.
Initially, Redis was offered under a permissive BSD license, which allowed modifications without disclosure. It later transitioned to proprietary licenses RSALv2 (Redis Source Available License v2) and SSPLv1 (Server Side Public License v1). Starting with Redis 8, the project code is available under the AGPLv3 license, which includes restrictions for applications that enable the operation of network services. When using AGPL components in the operation of network services, developers are required to provide users with the source code of all changes made to these components, even if the underlying software is not distributed and is used solely within internal infrastructure for service operation. The AGPLv3 license is compatible with GPLv3 but conflicts with the GPLv2 license.
The previous licenses, SSPL and RSAL, led to discrimination against certain categories of users, which prevented them from being considered open or free. Both licenses are similar in intent, with the difference being that the SSPL license is based on the copyleft AGPLv3 license, while the RSAL license is based on the permissive BSD license. The RSAL license allows use, modification, distribution, and integration of code into applications, except in cases where these applications are commercial or used to provide managed paid services. The SSPL license additionally requires that the same license be applied not only to the application code but also to the source texts of all components involved in providing the cloud service.
Simultaneously with the announcement of the license change, the release of Redis 8.0 was presented. However, despite the announcement of the release's availability, only a release candidate is currently available in the repository, and the link to download Redis 8.0 on the project's website leads to a page with a general description of the installation process. The release note also currently only mentions the release of 8.0-RC1.
Key changes in Redis 8.0:
- A new type for storing vector data sets, demanded in machine learning systems and semantic search, has been added. Vector sets expand the previously available functionality of sorted sets by allowing the storage of multidimensional vectors. To manipulate vector data, 11 new commands have been introduced, such as VADD, VREM, and VSIM.
- The core of Redis has been updated to include the Redis Query Engine, JSON, Time Series, and Probabilistic Data Types modules, which were previously delivered as separate Redis Stack extensions.
- Integrated support for a data structure in the form of JSON allows documents to be stored in JSON format linked to keys in Redis. For selective extraction of JSON documents and access to individual elements, the JSONPath query language can be used. It supports atomic updates, allowing changes to be made to individual fields of the JSON document without reloading the entire document.
- Support for data structures in the form of time series has been added (a record consists of time and a set of values corresponding to that time, e.g., collected through periodic polling of sensor states or metric gathering). Compression algorithms for such data have been employed to reduce memory consumption, and rules for downsampling archived data have been provided.
- Probabilistic data structures have been added: Bloom filter, Cuckoo filter, Count-min sketch, Top-k, and t-digest, which significantly reduce storage size while needing to store very large volumes of data by sacrificing accuracy in performing certain operations. The Bloom filter and Cuckoo filter allow for membership testing in a set, permitting false negatives for non-existent elements while excluding missing existing elements. Count-min sketch predicts the number of occurrences of a value in a set. Top-k identifies the most frequently occurring values. T-digest enables sampling of values greater or less than specified.
- The Redis Query Engine has been included, providing support for vector search and capabilities for generating queries based on content rather than keys. Redis Query Engine allows for the creation of additional indexes for data stored in hashes and JSON documents.
- Expanded support for ACL (Access Control Lists), allowing management of data access based on keys and permitting the definition of different sets of access rules for commands with the ability to bind privilege sets to each user. For example, with ACL, it is possible to determine which users can connect to Redis, what keys a user has access to, and which commands they can execute. Redis 8 introduces new ACL categories for new data structures.
- New commands for hash operations have been added:
- HGETDEL — retrieve and delete fields of a hash by the specified key.
- HGETEX — retrieve hash fields by the specified key and set an expiration time for them.
- HSETEX — set fields of a hash by the specified key and specify an expiration time for them.
- More than 30 performance optimizations have been implemented, resulting in command execution speed increases of up to 87%, throughput improvements of 112%, replication speed increases of 18%, and query retrieval speed in the Redis Query Engine up to 16 times faster (due to horizontal and vertical scaling). During a set of 149 tests, 90 commands executed faster. Throughput has significantly increased due to the transition to multithreaded operation for command parsing, client request processing, and reading/writing to network sockets. A new implementation of the multithreaded I/O processing mechanism (io-threads) has been proposed.
- A new replication mechanism has been introduced, consuming 35% less memory and operating 18% faster. To eliminate locking, two separate replication threads are used — one for transmitting changes to the primary node, and another for transmitting changes to intermediate nodes.
To manage data in the Redis DBMS, commands such as increment/decrement, standard operations on lists and sets (union, intersection), key renaming, multiple selections, and sorting functions are provided. Two storage modes are supported: periodic data synchronization to disk and logging changes on disk. In the latter case, full preservation of all changes is guaranteed. Transactions are supported, allowing a group of commands to be executed in one step, ensuring consistency and sequence (commands from other requests cannot interfere) during the execution of the specified set of commands, and in case of issues allowing for rollback of changes.
Master-slave data replication can be organized for several servers, carried out in a non-blocking mode. There is also a publish/subscribe messaging mode available, where a channel is created, and messages from it are distributed to clients by subscription. All data is fully cached in RAM. Client libraries are available for most popular languages, including Perl, Python, PHP, Java, Ruby, Tcl, JavaScript/Node.js, Go, and C#.
Source: opennet.ru
