The release of the Redis 8.4 DBMS, which belongs to the NoSQL class, has been published. Redis provides functions for storing data in key/value format, enhanced with support for structured data formats such as lists, hashes, and sets, as well as the ability to execute handler scripts on the server side in Lua. The project's code is written in C and is distributed under the AGPLv3 license.
The Redis DBMS supports transactions, allowing a group of commands to be executed in a single step, ensuring consistency and isolation (commands from other requests cannot interfere) of the execution of a given set of commands, and in case of issues, allowing for rollback of changes. All data is fully cached in memory. Client libraries are available for most popular languages, including Perl, Python, PHP, Java, Ruby, and Tcl.
Commands for managing data include increment/decrement, standard operations on lists and sets (union, intersection), renaming keys, 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 integrity of all changes is guaranteed. Master-slave data replication can be organized across multiple servers, carried out in a non-blocking mode. A publish/subscribe messaging mode is also available, which creates a channel where messages are spread to subscribed clients.
Key changes in Redis 8.4:
- The command 'FT.HYBRID' has been added, implementing hybrid search that combines full-text and vector search capabilities in a single query, considering both exact matches and semantic proximity. Result aggregation features are supported with syntax similar to the 'FT.AGGREGATE' command.
- The throughput in common Redis caching scenarios has been increased. For instance, under loads consisting of 10% write operations (SET) and 90% read operations (GET), with string values of 1 KB, throughput increased by 30%.

- The performance of search operations (FT.SEARCH) and result aggregation (FT.AGGREGATE) has been enhanced. In overloaded systems with a high number of parallel requests, throughput improvements and latency reductions of up to 4.7 times during searching and up to 1.4 times during result aggregation have been observed.

- Memory allocation during query execution has been optimized, and the ability to configure behavior when available memory is exhausted (OOM, out-of-memory) has been provided.
- Memory consumption for storing small strings (up to 7 bytes) in JSON-type structures has been reduced. For example, a JSON array containing 500 small key/value elements now occupies 37% less memory.
- The efficiency of storing JSON numeric arrays, where all elements are of the same type, has been improved (previously, the type and value for each element in such an array were preserved, whereas now the type is stored once for the entire array). In tests, arrays with a million homogeneous elements now require 50-92% less memory depending on the type.
- The SET command has been enhanced with options IFEQ, IFNE, IFDEQ, and IFDNE, allowing a single command to update a string key in situations where the associated value has not been changed by another client since it was retrieved.
- The XDELEX command has been added for atomic deletion of string keys if the associated value has not changed since retrieval.
- The DIGEST command has been added, returning a hash of the value associated with the specified key.
- The XREADGROUP command now includes the option "CLAIM " to read both idle pending and incoming messages.
- The MSETEX command has been added for atomically setting or updating multiple string keys at once, along with updating their expiration time.
- An atomic slot migration mechanism between cluster nodes (ASM - Atomic Slot Migration) has been added, resembling full synchronous replication but functioning at the level of individual data storage slots. The CLUSTER MIGRATION command has been introduced to import slots from other nodes, track migration progress, and mark pending migration operations as necessary.
- The CLUSTER SLOT-STATS command has been added for assessing statistics within the cluster broken down by individual slots, such as the number of keys, CPU load, and network I/O.
Source: opennet.ru


