Redis 8.8
What's new in Redis 8.8
Redis 8.8 introduces new features and performance improvements, building on the foundation of Redis 8.6.
This release delivers improvements across multiple areas:
- A new Array data structure
- Subkey notification for hash fields (field-level notifications)
INCREX: window counter rate limiter combiningINCR,INCRBY,INCRBYFLOAT, bounds, and expirationXNACK: new streams command that lets consumers explicitly release pending messagesZUNION,ZINTER,ZUNIONSTORE,ZINTERSTORE: newCOUNTaggregatorJSON.SET: newFPHAargument to specify the FP type for homogeneous FP arraysTS.RANGE,TS.REVRANGE,TS.MRANGE,TS.MREVRANGE: multiple aggregators in a single commandFT.HYBRIDKNNclause: new argument to request fewer candidates per shardFT.PROFILEHYBRID: profiling support forFT.HYBRID- New in-group sorting reducer -
COLLECTforFT.AGGREGATE - Substantial Search and Query performance improvements (Rust iterators, devirtualized vector hot paths, AArch64 atomics)
- HyperLogLog,
MGET/MSET, andHGETALLperformance improvements - Numerous security fixes and bug fixes across core, Search, JSON, Time Series, and Probabilistic
Below is a detailed breakdown of these updates.
Supported operating systems
Redis 8.8 is tested on:
- Ubuntu 22.04 (Jammy Jellyfish), 24.04 (Noble Numbat), 26.04 (Resolute Raccoon)
- Rocky Linux 8.10, 9.7, 10.1
- AlmaLinux 8.10, 9.7, 10.1
- Debian 12.13 (Bookworm), Debian 13.4 (Trixie)
- Alpine 3.23
- macOS 14.8.4 (Sonoma), 15.7.4 (Sequoia), 26.3 (Tahoe) - for both Intel and ARM
Security fixes
Redis 8.8 includes important security fixes (compared to 8.8-M03):
- (CVE-2026-23479) Use-After-Free in unblock client flow may lead to remote code execution.
- (CVE-2026-25243) Invalid memory access in
RESTOREmay lead to remote code execution. - (CVE-2026-23631) Lua Use-After-Free may lead to remote code execution.
- (CVE-2026-25588) Invalid memory access in
RESTOREmay lead to remote code execution (Time Series). - (CVE-2026-25589) Invalid memory access in
RESTOREmay lead to remote code execution (Probabilistic).
New features
Array data structure
Redis 8.8 introduces a new Array data structure (#15162), providing a dedicated data type for ordered, indexable collections.
Hash field-level notifications
Redis 8.8 adds subkey notifications for hash fields, enabling field-level keyspace notifications for hash data.
INCREX rate limiter
The new INCREX command (#15045) is a window counter rate limiter that combines INCR, INCRBY, INCRBYFLOAT, bounds, and expiration into a single atomic operation. It simplifies common rate-limiting patterns by eliminating the need for multi-command transactions.
XNACK streams command
The new XNACK command allows stream consumers to explicitly release pending messages, providing finer-grained control over consumer group pending entry lists.
Sorted set COUNT aggregator
ZUNION, ZINTER, ZUNIONSTORE, and ZINTERSTORE support a new COUNT aggregator for combining sorted sets.
JSON.SET FPHA argument
JSON.SET accepts a new FPHA argument that specifies the floating-point type for homogeneous FP arrays.
Time series multiple aggregators
TS.RANGE, TS.REVRANGE, TS.MRANGE, and TS.MREVRANGE now support multiple aggregators in a single command.
FT.HYBRID candidates per shard
The FT.HYBRID KNN clause accepts a new argument to request fewer candidates per shard, reducing overhead in cluster mode.
FT.PROFILE HYBRID
FT.PROFILE adds profiling support for FT.HYBRID queries.
In-group sorting reducer
A new reducer for FT.AGGREGATE allows you to unwind grouped documents after GROUPBY and sort them within each group, enabling more sophisticated aggregation pipelines.
Bug fixes
Redis 8.8 includes a broad set of bug fixes (compared to 8.8-M03).
Core fixes
SUBSCRIBE,PSUBSCRIBE,SSUBSCRIBE: crash on OOM (RED-167788).CONFIG SET: some settings allow invalid characters (RED-167787).SCRIPT DEBUG: potential crash on scripts (RED-175507).VADD: crash or buffer overflow on largeREDUCEvalue (RED-170921).VSET: crash on huge allocations (MOD-12678).cluster-announce-iprejecting hostnames (regression) (#15188).- Double free when loading streams with duplicate consumer PEL entries (#15095).
- Issues processing corrupt Streams RDB data (#15124).
fast_float_strtodrounding mismatch (#15111).vecClearreset the logical size without releasing element ownership (#15190).MULTIqueue incorrect memory accounting (#15163).- Cluster crash when
CLIENT KILLunsubscribesSSUBSCRIBEclient insideEXEC(#15094). - Listpack backlength encoding thresholds off-by-one (#15151).
- Under-copy in the Lua debugger (#15115).
- Sentinel config injection via
SENTINEL SET(#14970). - Client output buffer memory tracking not accounting for copy-avoided bulk string references (#14934).
INCREXsyntax update (#15237).- Memory tracking can be enabled at runtime in non-clustered mode (#15005).
Search and Query fixes
FT.PROFILE HYBRIDreturns an empty reply (MOD-14778).FT.SPELLCHECKtreatsPARAMSplaceholders as literal terms instead of resolving them (MOD-10596).FT.PROFILEoutput is inconsistent when a profiled value is missing (MOD-10560).FT.CREATEnow rejects schema definitions with invalid option combinations at creation time (MOD-14655).PERSISTandHPERSISTnotifications are not reflected in index expiration tracking (MOD-14800).- Race condition in
FT.HYBRIDcauses intermittent failures under concurrent hybrid query load (MOD-14732). - Crash on
FT.SEARCHwhen topology validation fails (for example, some nodes unreachable) (MOD-14475). - Coordinator deadlock under mixed
FT.SEARCHandFT.AGGREGATEload (MOD-14268). - Memory leak when
FT.DROPINDEXruns concurrently with in-flight hybrid queries (MOD-14135). FT.CURSOR READtimeout andON_TIMEOUT FAILnot enforced on coordinator and shard (MOD-14284, MOD-14998).- Cursors not cleaned up after
MAXIDLE, causing resource exhaustion (MOD-6430). - Coordinator
RETURN_STRICTreturns wrong data on partial results, includingSORTBYpipeline (MOD-13617). MAXPREFIXEXPANSIONwarnings not propagated to clients in cluster mode (MOD-13804).- Search commands fail when no worker thread is available instead of falling back to main thread (MOD-14921).
- RDB load missing validation of
FT.CREATEarguments, allowing corrupt index state on load (MOD-13118). - Use-after-move in
Indexer_Processcauses crash during indexing (MOD-14980). - Deadlock between background query and main-thread writer (MOD-15364).
FT.PROFILEprints output using wrong iterator type (MOD-14678).- Confusing error returned when
DEBUG_PARAMS_COUNTis zero (MOD-15118). - Stack-smashing error in coordinator code path (MOD-14649).
JSON fixes
- Trailing chars are ignored (MOD-7266).
- Wrong mutation ordering for array commands with recursive paths (MOD-6722).
- JSONPath evaluation issues (MOD-14664, MOD-7264, MOD-7272, MOD-7270, MOD-7268).
Time series fixes
- Potential crash on disconnections and TLS failures (MOD-14850).
count,countNaN,countAllreducers return NaN when all values are NaN (MOD-14420).- Cluster topology changes during a multi-shard command are not handled (MOD-14439).
Probabilistic fixes
- Memory leak on RDB load (MOD-15418).
Performance and resource utilization improvements
Redis 8.8 delivers a broad set of performance improvements (compared to 8.6).
Core improvements
- HyperLogLog: 4 independent accumulators that are merged at the end (#15049).
- Batched prefetch for
MGETandMSET(#15133). - Batched prefetch for
HGETALLon hashtable-encoded hashes (#14988). - Pass size hint to jemalloc for faster deallocation (#15071).
- Reduces allocator and accounting overhead by adding compile-time jemalloc tuning (#15096).
Search and Query improvements
- Vector index hot path (HNSW and brute-force) devirtualized, reducing per-query latency (MOD-14916).
- Inline LSE atomics enabled on AArch64, improving atomic operation throughput on ARM64 (MOD-14916, MOD-15419).
- Expiration handling overhead reduced when many keys expire simultaneously (MOD-14916).
- LTO (link-time optimization) enabled for x86_64 release builds (MOD-14700).
- Shard-level timeout adjusted to coordinator dispatch time for more accurate accounting (MOD-13189).
- Iterators ported to Rust, reducing FFI overhead.
numRecordsno longer updated for vector fields, removing unnecessary write overhead on ingest (MOD-15487).- VecSim SVS thread pool integrated with the worker pool for better thread utilization (MOD-9881).
Configuration parameters
Redis 8.8 introduces new configuration parameters (compared to 8.8-M03):
- Slowlog entry truncation limits (#15182):
slowlog-entry-max-argc: maximum number of command arguments kept in a slowlog entry.slowlog-entry-max-string-len: maximum length of a command argument in a slowlog entry.
- Default maximum worker threads value updated;
MAX_WORKER_THREADSis now a string config (MOD-14486, MOD-14763).
Metrics
FT.PROFILE: added queue time tracking (MOD-13602).
CLI tools
- Fixed memory leak on malformed legacy help entry in
redis-cli(#15150).