Redis Ltd announced a change in the project's licensing policy. Starting with the release of Redis 8.0, the project's code has become available under the free AGPLv3 license. The transition to an open license was made possible by the return of Salvatore Sanfilippo, the creator of the Redis DBMS, to the company. After leaving Redis Ltd, Salvatore developed a set of vector extensions (Vector Sets), which he was ready to contribute to Redis, but wanted the code he created to be provided under an open license. Salvador was able to convince his colleagues of the advisability of restoring the open nature of the project and improving interaction with the community.
Rowan Trollope, director of Redis Ltd, said the move to proprietary licenses last year had served its purpose, with AWS and Google forking the code, co-developing it and sharing their past work. However, the change in licenses had damaged the relationship with the community, which the company would now try to repair by reverting to shipping code under a free license.
After switching to proprietary licenses, development of the open source Redis codebase continued in forks of Valkey (a fork developed with the participation of Amazon, Google, Oracle, Ericsson, and Snap), Redict (a fork from the author of the Sway user interface and the Hare language), Garnet (a Redis-compatible DBMS from Microsoft), and KeyDB (a high-performance fork of Redis 5 from Snapchat). Distribution repositories Debian 13 Ubuntu 24.10, Fedora 41, RHEL 10, Azure Linux 3, Arch Linux and Alpine 3.20 the Redis package was replaced by a fork of Valkey.
Redis was initially released under a permissive BSD license that allowed its changes not to be made public, after which it switched to proprietary licenses RSALv2 (Redis Source Available License v2) and SSPLv1 (Server Side Public License v1). Starting with Redis 8, the project's code is available under the AGPLv3 license, which has the following special feature: restrictions for applications that provide network services. When using AGPL components in the operation of network services, the developer is obliged to provide the user with the source code of all changes made to these components, even if the underlying software of the service is not distributed and is used exclusively in the internal infrastructure to organize the operation of the service. The AGPLv3 license is compatible with the GPLv3, but conflicts with the GPLv2 license.
The previously used SSPL and RSAL licenses discriminated against certain categories of users, which did not allow them to be considered open or free. Both licenses are similar in their goals, and the differences come down to the fact that the SSPL license is based on the copyleft license AGPLv3, and the RSAL license is based on the permissive BSD license. The RSAL license allows you to use, modify, distribute and integrate the code into applications, except in cases where these applications are commercial or are used to provide managed paid services. The SSPL license additionally contains a requirement to deliver under the same license not only the code of the application itself, but also the source code of all components involved in providing a cloud service.
Along with the announcement of the license change, Redis 8.0 was released. However, despite the announcement of the release availability, the repository currently only contains a release candidate, and the link to download Redis 8.0 on the project website leads to a page with a general description of the installation process. The release notes also only list 8.0-RC1 so far.
Major changes in Redis 8.0:
- A type has been added for storing vector data sets, which are in demand in machine learning and semantic search systems. Vector sets extend the previously available functionality of sorted sets with the ability to store multidimensional vectors. Eleven new commands have been added for manipulating vector data, such as VADD, VREM, and VSIM.
- The Redis Query Engine, JSON, Time Series, and Probabilistic Data Types modules, previously delivered as separate Redis Stack extensions, have been migrated to the core Redis package.
- Support for the JSON data structure is integrated, allowing you to save documents in JSON format in binding to keys in Redis. The JSONPath query language can be used to selectively extract JSON documents and access individual elements. There is support for atomic updates, allowing you to make changes to individual fields of a JSON document without loading the entire document.
- Added support for data structures in the form of a time series (a record forms a time and a set of values ββcorresponding to this time, for example, obtained through periodic polling of the sensor status or collection of metrics). To reduce memory consumption, compression algorithms for such data are used and the ability to define rules for downsampling archived data is provided.
- Probabilistic data structures have been added: Bloom filter, Cuckoo filter, Count-min sketch, Top-k and t-digest, which allow to significantly reduce the storage size when it is necessary to store very large amounts of data at the expense of loss of accuracy when performing some operations. "Bloom filter" and "Cuckoo filter" allow to check for inclusion in a set, allowing a false definition of a missing element, but excluding the omission of an existing element. "Count-min sketch" predicts the number of times a value appears in a set. "Top-k" allows to find the most frequently occurring values. "T-digest" allows to perform selections of values ββgreater or less than a given value.
- The Redis Query Engine is included, with support for vector search and the ability to generate selections by content rather than by keys. The Redis Query Engine allows you to create additional indexes for data stored in hashes and JSON documents.
- Support for ACLs (Access Control Lists) has been expanded, allowing you to control access to data based on keys and allowing you to define different sets of command access rules with the ability to bind sets of permissions to each user. For example, using ACLs, you can define which users can connect to Redis, which keys a user has access to, and which commands they can execute. Redis 8 adds new ACL categories for new data structures.
- Added new commands for working with hashes:
- HGETDEL - output and delete hash fields by the specified key.
- HGETEX - return hash fields for the specified key and specify their lifetime.
- HSETEX β set hash fields for the specified key and specify the lifetime for them.
- More than 30 performance optimizations have been made, resulting in some tests accelerating command execution by 87%, increasing throughput by 112%, accelerating replication by 18%, and accelerating selection in Redis Query Engine up to 16 times (due to horizontal and vertical scaling). When passing a set of 149 tests, 90 commands began to execute faster. Throughput has increased significantly due to the transfer to multithreaded operation of components for parsing commands, processing client requests, reading and writing to network sockets. A new implementation of the multithreaded input/output processing mechanism (io-threads) has been proposed.
- A new replication engine is introduced that uses 35% less memory and is 18% faster. To eliminate blocking, two separate replication threads are used - one for transmitting changes to the primary node, and the other for transmitting changes to intermediate nodes.
To manage data, Redis DBMS provides commands such as increment/decrement, standard operations on lists and sets (union, intersection), key renaming, multiple selections and sorting functions. Two storage modes are supported: periodic data synchronization to disk and maintaining a change log on disk. In the second case, complete safety of all changes is guaranteed. Transactions are supported, allowing you to execute a group of commands in one step, guaranteeing consistency and sequence (commands from other requests cannot intervene) of the execution of a given set of commands, and in case of problems, allowing you to roll back changes.
It is possible to organize master-slave data replication on several servers, performed in non-blocking mode. A publish/subscribe messaging mode is also available, creating a channel from which messages are distributed to clients via 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
