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) =========================================================== 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