Redis Open Source 8.4 release notes =================================== -------------------------------------------------------------------------------- Upgrade urgency levels: LOW: No need to upgrade unless there are new features you want to use. MODERATE: Program an upgrade of the server, but it's not urgent. HIGH: There is a critical bug that may affect a subset of users. Upgrade! CRITICAL: There is a critical bug affecting MOST USERS. Upgrade ASAP. SECURITY: There are security fixes in the release. -------------------------------------------------------------------------------- The release notes contain PRs from multiple repositories: #n - Redis (https://github.com/redis/redis) #Qn = Query Engine (https://github.com/RediSearch/RediSearch) #Jn = JSON (https://github.com/RedisJSON/RedisJSON) #Tn = Time Series (https://github.com/RedisTimeSeries/RedisTimeSeries) #Pn = Probabilistic (https://github.com/RedisBloom/RedisBloom) ================================================================================ Redis 8.4.2 Released Mon 23 Feb 2026 10:00:00 IST ================================================================================ SECURITY: There is a security fix in the release ### Security fixes - A user can manipulate data read by a connection by injecting \r\n sequences into a Redis error reply ================================================================================ Redis 8.4.1 Released Sun 8 Feb 2026 9:00:00 IST ================================================================================ Update urgency: `SECURITY`: There are security fixes in the release. ### Security fixes - #T1837, #J1474 Hide Personally Identifiable Information from server log - #P936 Cuckoo filter: crash on RDB load on 0 buckets (MOD-11593) - #P945 Bloom filter: crash on RDB load on large number of filters (MOD-11590) ### Bug fixes - #14637 Atomic slot migration: wrong adjacent slot range behavior - #14567 Atomic slot migration: support delay trimming slots after finishing migrating slots - #T1864 Atomic slot migration: time series limitations (MOD-13611) - #14746 `CLUSTER SLOT-STATS`: Fix few memory tracking bugs - #Q6973 Correct empty string token counting in byteOffset calculations to ensure accurate text position tracking (MOD-11233) - #Q6995 Prevent `FT.INFO` command fanout to replicas to reduce unnecessary cluster traffic - #Q7154 Display Background Indexing OOM warning in `FT.AGGREGATE` when memory limits are approached (MOD-11817) - #Q7219 Resolve concurrency issue in `FT.AGGREGATE`reducer that caused intermittent errors (MOD-12243) - #Q7255 Correct `BM25STD` underflow wraparound to prevent incorrect scoring (MOD-12223) - #Q7264 Ensure accurate `totalDocsLen` updates to maintain correct document statistics (MOD-12234) - #Q7275 Report used memory as unsigned long to prevent overflow (RED-169833) - #Q7350 `FT.CREATE` with LeanVec parameters on non-Intel architectures (RED-176382) - #Q7371 Validate `search-min-operation-workers` min value correctly (MOD-12383) - #Q7430 Prevent coordinator deadlock in `FT.HYBRID` queries by avoiding index read lock (MOD-12489) - #Q7435 Ensure full profile output on timeout with `RETURN` policy in `FT.PROFILE` (MOD-12320) - #Q7446 Remove outdated validation from debug aggregate in cluster mode (MOD-12435) - #Q7455 Ensure internal cursors are deleted immediately in cluster mode (MOD-12493) - #Q7458 Correct GC regression that caused stability issues (MOD-12538) - #Q7460 Prevent potential double-free on error path in Fork GC (MOD-12521) - #Q7499 Propagate `HGETALL` command in HDT mode (MOD-12662) - #Q7534 Reduce number of worker threads asynchronously to prevent performance degradation (MOD-12252, MOD-11658) - #Q7553 Handle `WITHSCORES` correctly when SCORE is sent alone without extra fields in coordinator (MOD-12647) - #Q7560 Properly handle connection closing in IO thread at shutdown and fix searchRequestCtx freeing on error (MOD-12699) - #Q7685 Resolve cursor logical leak that could lead to resource exhaustion (MOD-12807) - #Q7710 Support for `WITHCOUNT` in `FT.AGGREGATE` (MOD-11751) - #Q7794 Correctly handle binary data with embedded NULLs to prevent crashes (MOD-13010) - #Q7812 Correct SVS GC for no-workers case (MOD-12983) - #Q7815 Fix command routing in cluster mode by not relying on shard index (MOD-13049) - #Q7823 Support vector blob only through parameter in `FT.HYBRID`(MOD-13123) - #Q7873 Handle warnings in empty `FT.AGGREGATE` replies in cluster mode (MOD-12640) - #Q7897 Remove asserts from DownloadFile to prevent crash (MOD-13096) - #Q7901 Support multiple warnings in reply to prevent warning loss (MOD-13252) - #Q7903 Eliminate memory leak in `FT.HYBRID` queries with Active-Active enabled (MOD-13143) - #Q7886 Remove non-TEXT fields from spec's keys dictionary to prevent incorrect field handling (MOD-13150) - #Q7905 Remove non-TEXT fields from spec's keys dictionary and refactor keys dict (MOD-13150, MOD-13151) - #Q7978 Avoid using negative key position values during command registration (MOD-13332) - #Q8052 Resolve incorrect results when using `LOAD *` with `FT.HYBRID` (MOD-12736, MOD-13556) - #Q8083 Correct `FULLTEXT` field metric count accuracy (MOD-13432) - #Q8089 Handle edge case in clusterset (MOD-13562) - #Q8151 Correct `FT.PROFILE` shard total profile time calculation (MOD-13735, MOD-13181) - #Q8153 Resolve config registration issue (RED-171841) - #Q7449 Ensure `FT.HYBRID` respects timeout settings (MOD-11004) - #Q7238 Initialize GIL_TIME properly for `FT.PROFILE` (MOD-12553) - #Q7453 Error behavior on early bailout and split OOM warning for shard and coordinator (MOD-12449) - #Q7615 Parameter `numDocs` from non-optimized Wildcard iterator (MOD-12392) - #Q7165 (Redis Enterprise only) `FT.DROPINDEX` as touches-arbitrary-keys for proper cluster handling causing crash on A-A (MOD-11090) - #Q7023 (Redis Enterprise only) Ensure all `FT.SUG*` commands are hashslot-aware to prevent cluster routing errors (MOD-11756) ### Performance and resource utilization improvements - #Q7496 Vector search performance improvements (MOD-12011, MOD-12063, MOD-12629, MOD-12346) - #Q7519 Reduce number of worker threads asynchronously to improve resource utilization (MOD-12252, MOD-11658) - #Q7694 Use asynchronous jobs in GC for SVS to reduce blocking (MOD-12668) - #Q7730 Support `filter_policy` and `batch_size` parameters for vector similarity search tuning (MOD-13007, MOD-12371) - #Q7782 Resolve SVS GC failures when worker threads are disabled (MOD-12983) - #Q7572 Implement ASM state machine on notifications (MOD-12170) - #Q7829 ASM-aware search flow for Active-Active deployments (MOD-12171, MOD-12169) - #Q7589 Support multiple slot ranges in `search.CLUSTERSET` for flexible cluster topology updates (MOD-11657) - #Q7862 Support subquery count in `FT.HYBRID` (MOD-11858, MOD-13146) - #Q7893 Request policy support for cursor operations (MOD-13146, MOD-9573, MOD-8104) - #Q8087 Warning when cursor may give inaccurate results due to Active-Active replication (MOD-12899) - #Q7445 Remove outdated validation from Debug Aggregate in cluster mode (MOD-12435) - #Q7384 Reduce index load from RDB temporary memory overhead (MOD-12212) ### Metrics - #Q7960 Persist query warnings across cursor reads (MOD-12984) - #Q7612 Track `maxprefixexpansions` errors and warnings in info (MOD-12417) - #Q7872 Handle warnings in empty `FT.AGGREGATE` replies in cluster mode (MOD-12640) - #Q7900 Support multiple warnings in reply (MOD-13252) - #Q7576 Track OOM errors and warnings in info (MOD-12418) - #Q7507 Track timeout errors and warnings in info (MOD-12419) - #Q7341 Rename `FT.PROFILE` counter fields for clarity (MOD-6056) - #Q7436, #Q7427 Enhance `FT.PROFILE` with vector search execution details (MOD-12263) - #Q7573 Debug support for `FT.PROFILE` command (MOD-12627) - #Q7736 Add `Internal cursor reads` metric to cluster `FT.PROFILE` output (MOD-12414) - #Q7692 Declare query error struct on `_FT.CURSOR PROFILE` (MOD-12955) - #Q7848 Store and display shard ID in profile output (MOD-12321) - #Q7422 Track syntax and argument errors in query error metrics (MOD-12416) - #Q7552 Add `active_io_threads` metric (MOD-12069, MOD-12695) - #Q7622 Add `active_coord_threads` metric (MOD-12694, MOD-12069) - #Q7564 Add `active_worker_threads` metric (MOD-12694, MOD-12069) - #Q7626 Add `*_pending_jobs` metrics for job queues (MOD-12069) - #Q7658 Add pending workers admin jobs metric (MOD-12069, MOD-12791) - #Q7731 Add `active_topology_update_threads` metric (MOD-12069, MOD-12790) - #Q7760 Extend indexing metrics for more detailed performance data (MOD-12070) ### Configuration parameters - #Q7083 Add default scorer configuration option (MOD-10037) =========================================================== 8.4 GA (v8.4.0) Released Tue 18 Nov 2025 15:00:00 IST =========================================================== This is the General Availability release of Redis 8.4 in Redis Open Source. ### Major changes compared to 8.2 - `DIGEST`, `DELEX`; `SET` extensions - atomic compare-and-set and compare-and-delete for string keys - `MSETEX` - atomically set multiple string keys and update their expiration - `XREADGROUP` - new `CLAIM` option for reading both idle pending and incoming stream entries - `CLUSTER MIGRATION` - atomic slot migration - `CLUSTER SLOT-STATS` - per-slot usage metrics: key count, CPU time, and network I/O - Redis query engine: `FT.HYBRID` - hybrid search and fused scoring - Redis query engine: I/O threading with performance boost for search and query commands (FT.*) - I/O threading: substantial throughput increase (e.g. >30% for caching use cases (10% `SET`, 90% `GET`), 4 cores) - JSON: substantial memory reduction for homogeneous arrays (up to 91%) ### 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.4 on - Ubuntu 22.04 (Jammy Jellyfish), 24.04 (Noble Numbat) - Rocky Linux 8.10, 9.5 - AlmaLinux 8.10, 9.5 - Debian 12 (Bookworm), Debian 13 (Trixie) - macOS 13 (Ventura), 14 (Sonoma), 15 (Sequoia) ### Bug fixes (compared to 8.4-RC1) - #14524 `XREADGROUP CLAIM` returns strings instead of integers - #14529 Add variable key-spec flags to SET IF* and DELEX - #P928 Potential memory leak (MOD-11484) - #T1801, #T1805 macOS build failures (MOD-12293) - #J1438 `JSON.NUMINCRBY` - wrong result on integer array with non-integer increment (MOD-12282) - #J1437 Thread safety issue related to ASM and shared strings (MOD-12013) ### Performance and resource utilization improvements (compared to 8.4-RC1) - #14480, #14516 Optimize `XREADGROUP` ### known bugs and limitations - When executing `FT.SEARCH`, `FT.AGGREGATE`, `FT.CURSOR`, `FT.HYBRID`, `TS.MGET`, `TS.MRANGE`, `TS.MREVRANGE` and `TS.QUERYINDEX` while an atomic slot migration process is in progress, the results may be partial or contain duplicates - `FT.PROFILE`, `FT.EXPLAIN` and `FT.EXPLACINCLI` doesn’t contain the `FT.HYBRID` option - Metrics from `FT.HYBRID` command aren’t displayed on `FT.INFO` and `INFO` - Option `EXPLAINSCORE`, `SHARD_K_RATIO`, `YIELD_DISTANCE_AS` and `WITHCURSOR` with `FT.HYBRID` are not available - Post-filtering (after `COMBINE` step) using FILTER is not available - Currently the default response format considers only `key_id` and `score`, this may change for delivering entire document content =========================================================== 8.4-RC1 (v8.3.240) Released Tue 4 Nov 2025 10:00:00 IST =========================================================== This is the first Release Candidate of Redis 8.4 in Redis Open Source. Release Candidates are feature-complete pre-releases. Pre-releases are not suitable for production use. ### 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.4 on - Ubuntu 22.04 (Jammy Jellyfish), 24.04 (Noble Numbat) - Rocky Linux 8.10, 9.5 - AlmaLinux 8.10, 9.5 - Debian 12 (Bookworm), Debian 13 (Trixie) - macOS 13 (Ventura), 14 (Sonoma), 15 (Sequoia) ### New Features (compared to 8.2.3) - #14414 New command: `CLUSTER MIGRATION` - atomic slot migration - #14435 New commands: `DELEX`, `DIGEST`; `SET` extensions - atomic compare-and-set and compare-and-delete for string keys - #14434 New command: `MSETEX` - set multiple keys and update their expiration - #14402 `XREADGROUP` - add `CLAIM min-idle-time` to consume both idle pending entries and incoming entries - #14058 Add auto-repair options for broken AOF tail on startup - #14296 Support decoding JSON empty array as a Lua array - #T1773 `HELP` and `COMMAND DOCS` now support time series commands (MOD-8133) - #P892 `HELP` and `COMMAND DOCS` now support probabilistic commands (MOD-8133) - #Q7076, #Q6857 New Command: `FT.HYBRID` - hybrid queries with RRF and LINEAR combination - #Q7022 Support index updates when atomic slot migrations occurs - #Q6313 Support multiple I/O threads for RQE cluster manager - Coordinator (MOD-10562) ### Bug fixes (compared to 8.2.3) - #14423 Potential infinite loop when a stream is corrupted - #14420 Shutdown blocked client not being properly reset after shutdown cancellation - #14417 `CLUSTER FORGET` - heap-buffer-overflow - #14415 Potential crash in `lookupKey()` when `executing_client` is NULL - #T1776 Potential crash on `TS.RANGE` with `ALIGN +`, `AGGREGATION twa` and `EMPTY` (MOD-11620, MOD-10484) ### Performance and resource utilization improvements (compared to 8.2.3) - #14440 Lookahead prefetching - parse multiple commands in advance through a lookahead pipeline - #14309 Optimize `BITCOUNT` with AVX2 and AVX512 popcount implementations - #14227 Optimize `BITCOUNT` with Arm Neon SIMD vectorization - #14428 Optimize HyperLogLog with branchless comparisons and Arm Neon SIMD vectorization - #14222 Optimize Vector set `VADD` and `VSIM` with AVX2 and AVX512 dot product implementations - #JIJSON9 JSON - memory footprint improvement by using homogeneous arrays (MOD-9511) - #JIJSON7 JSON - memory footprint improvement by inlining short strings (MOD-9511) ### Configuration parameters - #14058 `aof-load-corrupt-tail-max-size` - maximum corrupted tail size (in bytes) to attempt to repair automatically - #14296 `decode_array_with_array_mt` - Lua: control how empty JSON arrays are handled - #14440 `lookahead` - runtime-configurable lookahead depth (default: 16) - #Q7065 `search-default-scorer` - default text and tag scorer (new default is BM25STD) - #Q6769 `search-on-oom` - behavior when OOM event occurs in the query time, supports 3 values: - `IGNORE` - queries run despite OOM, not recommended for heavy result sets (current behaviour) - `FAIL` - query execution fails if any node is in OOM state at start - `RETURN` - returns partial results if OOM is detected in only some cluster nodes (default) - #Q6313 `search-io-threads` - allow setting the comms threads used by the cluster manager - coordinator (default: 20) ### known bugs and limitations - When executing `FT.SEARCH`, `FT.AGGREGATE`, `FT.CURSOR`, `FT.HYBRID`, `TS.MGET`, `TS.MRANGE`, `TS.MREVRANGE` and `TS.QUERYINDEX` while an atomic slot migration process is in progress, the results may be partial or contain duplicates - `FT.PROFILE`, `FT.EXPLAIN` and `FT.EXPLACINCLI` doesn’t contain the `FT.HYBRID` option - Metrics from `FT.HYBRID` command aren’t displayed on `FT.INFO` and `INFO` - Option `EXPLAINSCORE`, `SHARD_K_RATIO`, `YIELD_DISTANCE_AS` and `WITHCURSOR` with `FT.HYBRID` are not available - Post-filtering (after `COMBINE` step) using FILTER is not available - Currently the default response format considers only `key_id` and `score`, this may change for delivering entire document content