Redis Open Source 8.8 release notes
Redis Open Source 8.8 release notes.
Redis Open Source 8.8.0 (May 2026)
This is the General Availability release of Redis 8.8 in Redis Open Source.
Major changes compared to 8.6
- New data structure: Array (@antirez)
- Subkey notification for hash fields - field-level notifications
INCREX: a window counter rate limiter combiningINCR,INCRBY,INCRBYFLOAT, bounds, and expiration (@raffertyyu + Redis team)XNACK: a new streams command - allow consumers to 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- Performance improvements
Binary distributions
- Alpine and Debian Docker images - https://hub.docker.com/_/redis
- Install using snap - see https://github.com/redis/redis-snap
- Install using brew - see https://github.com/redis/homebrew-redis
- Install using RPM - see https://github.com/redis/redis-rpm
- Install using Debian APT - see https://github.com/redis/redis-debian
Operating systems we test Redis 8.8 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
Bug fixes (compared to 8.8-RC1)
- #15237
INCREXsyntax update. - #15005 Memory tracking can be enabled at runtime in non-clustered mode .
- RedisTimeSeries/RedisTimeSeries#1930 Cluster topology changes during a multi-shard command are not handled (MOD-14439).
- RedisBloom/RedisBloom#1007 Memory leak on RDB load (MOD-15418).
Redis Open Source 8.8-RC1 (May 2026)
This is the first Release Candidate of Redis 8.8 in Redis Open Source.
Release Candidates are feature-complete pre-releases. Pre-releases are not suitable for production use.
Headlines:
Redis 8.8 introduces new features and performance improvements.
Operating systems we test Redis 8.8 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 (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 (compared to 8.8-M03)
- #15162 New data structure: Array (@antirez)
- #15045
INCREX: a window counter rate limiter combiningINCR,INCRBY,INCRBYFLOAT, bounds, and expiration (@raffertyyu + Redis team) - In group sorting new reducer, allowing unwind grouped documents (after
GROUPBY) and sort them
Removed Features (compared to 8.8-M03)
- #15191 Remove GCRA rate limiter
Bug fixes (compared to 8.8-M03)
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)- #15188
cluster-announce-iprejecting hostnames (regression) - #15095 Double free when loading streams with duplicate consumer PEL entries
- #15124 Issues processing corrupt Streams RDB data
- #15111
fast_float_strtodrounding mismatch - #15190
vecClearreset the logical size without releasing element ownership - #15163
MULTIqueue memory incorrect memory accounting - #15094 Cluster crash when
CLIENT KILLunsubscribesSSUBSCRIBEclient insideEXEC - #15151 Listpack backlength encoding thresholds off-by-one
- #15115 Under-copy in the Lua debugger
- #14970 Sentinel config injection via
SENTINEL SET - #14934 Client output buffer memory tracking not accounting for copy-avoided bulk string references
- RediSearch/RediSearch#9182
FT.PROFILE HYBRIDreturns an empty reply (MOD-14778) - RediSearch/RediSearch#9079
FT.SPELLCHECKtreatsPARAMSplaceholders as literal terms instead of resolving them (MOD-10596) - RediSearch/RediSearch#9047
FT.PROFILEoutput is inconsistent when a profiled value is missing (MOD-10560) - RediSearch/RediSearch#9078
FT.CREATEnow rejects schema definitions with invalid option combinations at creation time (MOD-14655) - RediSearch/RediSearch#9012
PERSISTandHPERSISTnotifications are not reflected in index expiration tracking (MOD-14800) - RediSearch/RediSearch#9066 Race condition in
FT.HYBRIDcauses intermittent failures under concurrent hybrid query load (MOD-14732) - RediSearch/RediSearch#9163 Crash on
FT.SEARCHwhen topology validation fails (for example, some nodes unreachable) (MOD-14475) - RediSearch/RediSearch#9031, RediSearch/RediSearch#9473 Coordinator deadlock under mixed
FT.SEARCHandFT.AGGREGATEload (MOD-14268) - RediSearch/RediSearch#9028 Memory leak when
FT.DROPINDEXruns concurrently with in-flight hybrid queries (MOD-14135) - RediSearch/RediSearch#9310, RediSearch/RediSearch#9350
FT.CURSOR READtimeout andON_TIMEOUT FAILnot enforced on coordinator and shard (MOD-14284, MOD-14998) - RediSearch/RediSearch#9425 Cursors not cleaned up after
MAXIDLE, causing resource exhaustion (MOD-6430) - RediSearch/RediSearch#9234, RediSearch/RediSearch#9404 Coordinator
RETURN_STRICTreturns wrong data on partial results, includingSORTBYpipeline (MOD-13617) - RediSearch/RediSearch#9382
MAXPREFIXEXPANSIONwarnings not propagated to clients in cluster mode (MOD-13804) - RediSearch/RediSearch#9218 Search commands fail when no worker thread is available instead of falling back to main thread (MOD-14921)
- RediSearch/RediSearch#9448 RDB load missing validation of
FT.CREATEarguments, allowing corrupt index state on load (MOD-13118) - RediSearch/RediSearch#9377 Use-after-move in
Indexer_Processcauses crash during indexing (MOD-14980) - RediSearch/RediSearch#9408 Deadlock between background query and main-thread writer (MOD-15364)
- RediSearch/RediSearch#9114
FT.PROFILEprints output using wrong iterator type (MOD-14678) - RediSearch/RediSearch#9421 Confusing error returned when
DEBUG_PARAMS_COUNTis zero (MOD-15118) - RediSearch/RediSearch#9045 Stack-smashing error in coordinator code path (MOD-14649)
- RedisJSON/RedisJSON#1554 Trailing chars are ignored (MOD-7266); Fixes RedisJSON/RedisJSON#976
- RedisJSON/RedisJSON#1543 Wrong mutation ordering for array commands with recursive paths (MOD-6722)
- RedisJSON/RedisJSON#1542 JSONPath evaluation issues (MOD-14664); Fixes RedisJSON/RedisJSON#968 (MOD-7264), RedisJSON/RedisJSON#962 (MOD-7272), RedisJSON/RedisJSON#963 (MOD-7270), RedisJSON/RedisJSON#1089 (MOD-7268)
- RedisTimeSeries/RedisTimeSeries#2003 Potential crash on disconnections and TLS failures (MOD-14850)
- RedisTimeSeries/RedisTimeSeries#2013
count,countNaN,countAllreducers return NaN when all values are NaN (MOD-14420)
Performance and resource utilization improvements (compared to 8.8-M03)
- #15049 Hyperloglog: 4 independent accumulators that are merged at the end
- #15133 Batched prefetch for
MGETandMSET - #14988 Batched prefetch for
HGETALLon hashtable-encoded hashes - #15071 Pass size hint to jemalloc for faster deallocation
- #15096 Reduces allocator and accounting overhead by adding compile-time jemalloc tuning
- RediSearch/RediSearch#9197 Vector index hot path (HNSW and brute-force) devirtualized, reducing per-query latency (MOD-14916)
- RediSearch/RediSearch#9262, RediSearch/RediSearch#9476 Inline LSE atomics enabled on AArch64, improving atomic operation throughput on ARM64 (MOD-14916, MOD-15419)
- RediSearch/RediSearch#9293 Expiration handling overhead reduced when many keys expire simultaneously (MOD-14916)
- RediSearch/RediSearch#9017 LTO (link-time optimization) enabled for x86_64 release builds (MOD-14700)
- RediSearch/RediSearch#8765 Shard-level timeout adjusted to coordinator dispatch time for more accurate accounting (MOD-13189)
- RediSearch/RediSearch#8790, RediSearch/RediSearch#8900, RediSearch/RediSearch#8827, RediSearch/RediSearch#8971, RediSearch/RediSearch#8966, RediSearch/RediSearch#8762, RediSearch/RediSearch#8678, RediSearch/RediSearch#8915, RediSearch/RediSearch#8653, RediSearch/RediSearch#9085, RediSearch/RediSearch#8751, RediSearch/RediSearch#8692, RediSearch/RediSearch#9224 Iterators ported to Rust, reducing FFI overhead
- RediSearch/RediSearch#9500
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
- #15182 Slowlog entry truncation limits:
slowlog-entry-max-argc: maximum number of command arguments kept in a slowlog entryslowlog-entry-max-string-len: maximum length of a command argument in a slowlog entry
- RediSearch/RediSearch#8876, RediSearch/RediSearch#8960 Default maximum worker threads value updated;
MAX_WORKER_THREADSis now a string config (MOD-14486, MOD-14763)
Metrics (compared to 8.8-M03)
- RediSearch/RediSearch#8210, RediSearch/RediSearch#8231
FT.PROFILE: added queue time tracking (MOD-13602)
CLI tools
- #15150 Memory leak on malformed legacy help entry in redis-cli