Releases: redis/redis
Release list
8.10.0
This is the General Availability release of Redis 8.10 in Redis Open Source.
Major changes compared to 8.8
- Compact hashes - a new hash encoding that reduces memory usage by storing hash field names just once for keys that share a schema
- New command:
HIMPORT- high-throughput compact hash bulk insertion - TLS peer certificate-based server-to-server authentication
- New commands:
LMOVEM,BLMOVEM- move multiple elements between lists - New command:
SUNIONCARD- get the cardinality of the union of multiple sets - New command:
SDIFFCARD- get the cardinality of the difference between sets - New command:
BACKUP- node-side implementation for backup and restore based on multi-part AOF (MP-AOF) XREAD,XREADGROUP- newMAXCOUNTandMAXSIZEarguments to cap the cumulative reply entries and size- New command:
FT.ALIASLIST- get all aliases for the index - Stemmer support for Malay and Tagalog languages
- JSONPath extensions
- New commands:
TS.NRANGE,TS.NREVRANGE- Query a range across multiple time series; group results by timestamp - New command:
TS.READ- optionally blocking read - New command:
TS.QUERYLABELS- Get a list of labels and label-values - New command:
TS.MRANGE,TS.MREVRANGE- newEXCLUDEEMPTYargument to exclude series with no reported samples - 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.10 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.10-RC2)
- #15513 Prevented a division-by-zero error when active defragmentation thresholds are configured with equal or reversed value
- #15453 Clients blocked on
BLPOP,BLMOVE, orBLMOVEMcould remain blocked afterSORTwithSTOREreplaced the target key with a list - #15499 Memory usage reported for compressed replication clients could be lower than the actual memory consumed
- #15518 notify modules when node's own ip/port changes
- #15539 Loading an AOF file with an RDB preamble could fail when active defragmentation was enabled
- RediSearch/RediSearch#10528 Crash in the numeric range tree when background garbage collection encounters an empty leaf during active indexing on a numeric field. (MOD-16877)
- RediSearch/RediSearch#10605 FT.CREATE and FT.ALTER now reject an empty string as a field name, preventing a crash loop in the fork-GC on indexes with an empty TAG field. (MOD-17034)
- RediSearch/RediSearch#10488 FT.INFO reports a negative num_records after garbage collection on indexes that include an INDEXMISSING field. (MOD-16940)
- RediSearch/RediSearch#10568 Cluster FT.AGGREGATE fails with SEARCH_FIELD_DUP when a GROUPBY contains multiple REDUCE COLLECT calls over the same field differing only in option-keyword casing. (MOD-16365)
- RediSearch/RediSearch#10605 FT.CREATE and FT.ALTER now return an error when a field name is an empty string; previously such schemas were accepted silently. (MOD-17034)
- RediSearch/RediSearch#10522 coord_total_query_warnings_timeout double-counts timeout warnings for FT.SEARCH queries that use a hybrid (vector + filter) execution path. (MOD-15973)
8.8.1
SECURITY: There is a security fix in the release.
Security fixes
- RedisBloom/RedisBloom#1044 Crafted RESTORE payloads in RedisBloom and TDigest may trigger out-of-bounds writes, potentially leading to remote code execution
8.6.5
SECURITY: There are security fixes in the release.
Security fixes
- A crafted stream RESTORE payload can make two consumers share the same NACK, leading to a use-after-free that may result in Remote Code Execution
- RedisBloom/RedisBloom#1046 Crafted RESTORE payloads in RedisBloom and TDigest may trigger out-of-bounds writes, potentially leading to remote code execution
Bug fixes
- RedisBloom/RedisBloom#1021 Replicate
CF.LOADCHUNKdata chunks to prevent silent Cuckoo Filter data loss on failover
8.4.5
SECURITY: There are security fixes in the release.
Security fixes
- A crafted stream RESTORE payload can make two consumers share the same NACK, leading to a use-after-free that may result in Remote Code Execution
- RedisBloom/RedisBloom#1039 Crafted RESTORE payloads in RedisBloom and TDigest may trigger out-of-bounds writes, potentially leading to remote code execution
Bug fixes
- RedisBloom/RedisBloom#1020 Replicate
CF.LOADCHUNKdata chunks to prevent silent Cuckoo Filter data loss on failover
8.2.8
SECURITY: There are security fixes in the release.
Security fixes
- A crafted stream RESTORE payload can make two consumers share the same NACK, leading to a use-after-free that may result in Remote Code Execution
- RedisBloom/RedisBloom#1041 Crafted RESTORE payloads in RedisBloom and TDigest may trigger out-of-bounds writes, potentially leading to remote code execution
Bug fixes
- RedisBloom/RedisBloom#1019 Replicate
CF.LOADCHUNKdata chunks to prevent silent Cuckoo Filter data loss on failover
7.4.10
Update urgency: SECURITY: There is a security fix in the release.
Security fixes
- A crafted stream
RESTOREpayload can make two consumers share the same NACK, leading to a use-after-free that may result in Remote Code Execution
7.2.15
Update urgency: SECURITY: There is a security fix in the release.
Security fixes
- A crafted stream
RESTOREpayload can make two consumers share the same NACK, leading to a use-after-free that may result in Remote Code Execution
6.2.23
Update urgency: SECURITY: There is a security fix in the release.
Security fixes
- A crafted stream
RESTOREpayload can make two consumers share the same NACK, leading to a use-after-free that may result in Remote Code Execution
8.10-RC2
This is the second Release Candidate of Redis 8.10 in Redis Open Source.
Release Candidates are feature-complete pre-releases. Pre-releases are not suitable for production use.
Bug fixes (compared to 8.10-RC1)
- A user can manipulate data read by a connection by injecting \r\n sequences into a Redis error reply
- A typo in release.h that could cause build failures
8.10-RC1
This is the first Release Candidate of Redis 8.10 in Redis Open Source.
Release Candidates are feature-complete pre-releases. Pre-releases are not suitable for production use.
Headlines:
Redis 8.10 introduces new features and performance improvements.
Operating systems we test Redis 8.10 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
New Features (compared to 8.8)
- #15364 Compact hashes - a new hash encoding that reduces memory usage by storing hash field names just once for keys that share a schema
- #15366 Replication stream compression to reduce bandwidth consumption between primaries and replicas
- #15364 New command:
HIMPORT- high-throughput compact hash bulk insertion - #15405 New commands:
LMOVEM,BLMOVEM- move multiple elements between lists - #14893 New command:
SUNIONCARD- get the cardinality of the union of multiple sets - #15278 New command:
SDIFFCARD- get the cardinality of the difference between sets - #15441 New command:
BACKUP- node-side implementation for backup and restore based on multi-part AOF (MP-AOF) - #15282
XREAD,XREADGROUP- newMAXCOUNTandMAXSIZEarguments to cap the cumulative reply entries and size - #15337 New
SCRIPT_RUNNERcommand flag: flag commands that execute scripts or functions - #15347
SLOWLOG GET- new reply argument: total argument count - RediSearch/RediSearch#9626 New command:
FT.ALIASLIST- get all aliases for the index (RED-197340) - RediSearch/RediSearch#9052 New Languages Search: Stemmer support for Malay and Tagalog languages (RED-132425)
- RediSearch/RediSearch#9291
FT.AGGREGATEnow supports whole-document fetching usingCOLLECT, in-group SORTBY/LIMIT, and deduplication control within a single query. (RED-177887) - RediSearch/RediSearch#8169, RediSearch/RediSearch#8236, RediSearch/RediSearch#9234, RediSearch/RediSearch#9443 —
FT.SEARCH,FT.AGGREGATE,FT.HYBRID: enforce queryTIMEOUTmore strictly; long-running queries require vertical scaling (multi-threaded execution). (RED-132340)- use
FAILwhen correctness requires rejecting timed-out queries. Withsearch-workers> 0` (the default), the timeout is enforced preemptively - use
RETURNwhen best-effort partial results are acceptable and strictness not enforced at post-processing time. - use
RETURN_STRICTwhen best-effort partial results are acceptable and strictness enforced on post-processing. - New parameter
search-global-timeoutacting as cap value to timeout setting on query time TIMEOUT param
- use
- RedisJSON/RedisJSON#1602, RedisJSON/RedisJSON#1603, RedisJSON/RedisJSON#1604, RedisJSON/RedisJSON#1607, RedisJSON/RedisJSON#1618 JSONPath extensions (MOD-16274, MOD-16275):
- Projection expressions at the top level of a JSONPath query
==and!=can now compare any literal, including array and object literals- Filter negation operator:
! size/sizeofandemptyoperators on string, array, object, and nodelistinandninoperators: membership test on an array and nodelist- Operators on numbers: binary
-,+,*,/,%, and unary-and+ - Operator on object:
~ length()function on array, object, and string- Functions on number:
abs(),ceiling(),floor() - Functions on string:
match(),search() - Strings concatenation with
concat() - Functions on array:
first(),last(),index(),append() - Aggregation functions on array:
min(),max(),avg(),sum(),stddev() - Function on object:
keys() - Function on nodelist:
count() - Function on nodelist with exactly one node:
value() - Relations functions on array and nodelist:
subsetof(),anyof(),noneof()
- RedisTimeSeries/RedisTimeSeries#2052 New commands:
TS.NRANGE,TS.NREVRANGE- Query a range across multiple time series; group results by timestamp (RED-149232) - RedisTimeSeries/RedisTimeSeries#2054 New command:
TS.READ- optionally blocking read (RED-132421) - RedisTimeSeries/RedisTimeSeries#2090 New command:
TS.QUERYLABELS- Get a list of labels and label-values (RED-132355) - RedisTimeSeries/RedisTimeSeries#2072 New command:
TS.MRANGE,TS.MREVRANGE- newEXCLUDEEMPTYargument to exclude series with no reported samples (RED-132536)
Bug fixes (compared to 8.8.0)
- #15478
SORT,GEORADIUS,GEORADIUSBYMEMBER,XREAD,XREADGROUP- ACL permission bypass - #15329, #15467 - I/O thread busy looping for replica clients
- #15466 Duplicate KeyMeta restoration in
RESTORE-based AOF rewrites - #15462
MEMORY USAGEover-reports memory consumption - #15447 Full sync under heavy write load
- #15412 Unit mismatch disables the FAST expire cycle stale trigger
- #15392 Crash on
VRANDMEMBERwithLLONG_MINcount - #15409
CONFIG SET- crash on of TLS options in non-TLS builds - #15371 ACL key-name leak in BCAST client-side caching invalidations
- #15433 Signed overflow in
BITFIELDoffset parsing - #15446 The select-based event loop backend enqueues registered file descriptors that
select()did not mark ready - #15309
mem_clients_normaldrift when a replica drops its cached master after a failed partial resync - #15357 Crash on missing module numeric config
- #15377 In-progress atomic slot migration tasks keep running on
RM_ResetDatasetandRM_RdbLoad - #15391, #15356, #15436 NULL dereference
- #15390 Overflow on memory unit conversions
- #15291
SETdoes not enforce mutually exclusiveNX/XXandIF*options - #15322
CONFIG SETdoes not reject duplicate arguments when using both primary name and alias - #15407
LSETout-of-range 64-bit index truncation - #15308 Improve RDB load robustness (streams)
- #15263 Tighter cluster bus parsing for
PING,PONG, andMEETpackets - #15247 Partial crash log on LoongArch architecture
- #15270
VADD ... CAS SETATTR- wrong attributes count - RediSearch/RediSearch#10375
FT.CURSOR READ: crash after the underlying index was dropped (MOD-16703) - RediSearch/RediSearch#10408
FT.SEARCHwithLIMITreturns too many results in cluster mode over RESP3 (MOD-16767) - RediSearch/RediSearch#10420
[FT.INFO](http://ft.info/)could report incorrect values for multi-value TAG fields after document updates (MOD-16745) - RediSearch/RediSearch#10488
FT.INFOreports a negativenum_recordsafter garbage collection on indexes with anINDEXMISSINGfield (MOD-16940) - RediSearch/RediSearch#10392 Vector search: crash (SIGSEGV) in FP32/L2 distance computation on x86 without AVX support, affecting certain vector dimensions (MOD-16730)
- RediSearch/RediSearch#9963 Range query returns incomplete results when the lower bound is an excluded empty string (MOD-15897)
- RediSearch/RediSearch#10066
FT.AGGREGATE .. WITHCOUNTcoordinator leaks resources on timeout (MOD-16210) - RediSearch/RediSearch#10247 Local
FT.HYBRIDignoresON_TIMEOUT RETURN_STRICTand continues execution past the deadline (MOD-16492) - RediSearch/RediSearch#10255 Blocked search clients trigger unnecessary query dumps, adding CPU and log overhead (MOD-16518)
- RediSearch/RediSearch#10151
FT.HYBRIDsupportsEXPLAINSCORE, exposing the fusion method (RRForLINEAR) (MOD-10044) - RedisJSON/RedisJSON#1542, RedisJSON/RedisJSON#1543 Wrong results when evaluating paths with recursive descent (MOD-6722, MOD-14664)
- RedisJSON/RedisJSON#1554 Any literal that starts with true/false/null is interpreted as true/false/null (MOD-7266)
- RedisJSON/RedisJSON#1600 Improve RDB load robustness
- RedisTimeSeries/RedisTimeSeries#2067
TS.INFO- inaccurate memory usage calculation (MOD-6409) - RedisTimeSeries/RedisTimeSeries#2036, RedisTimeSeries/RedisTimeSeries#2053, RedisTimeSeries/RedisTimeSeries#2056, #2074 Aggregation fixes (MOD-8187, MOD-16224, MOD-15565)
- RedisTimeSeries/RedisTimeSeries#2004, RedisTimeSeries/RedisTimeSeries#2051 Improve RDB load robustness
- RedisTimeSeries/RedisTimeSeries#2104 Issues after cluster topology changes
- RedisTimeSeries/RedisTimeSeries#2122 Error on the first cross-shard command (TLS)
- RedisTimeSeries/RedisTimeSeries#2109
TS.INCRBYwithTIMESTAMP *replication timestamp drift - RedisBloom/RedisBloom#1014
CF.LOADCHUNKpartial replication (MOD-16050) - RedisBloom/RedisBloom#1026, RedisBloom/RedisBloom#1027 Improve RDB load robustness
Performance and resource utilization improvements (compared to 8.8.0)
- #15376 Optimize
lpSeek()by validating entries only when necessary - #15345 Optimize wide
HSET/HMSETon a fresh hash with a single batched listpack append - #15330 Avoid recomputing allocator fragmentation twice per cron tick (RED-200844)
- #15259 Trim excess SDS allocation in inline command parsing
- #15256 rax memory reduction: leaf-inlining for fixed-length-key trees - improves
XREADGROUPperformance - #15397 Improve
RESTORE REPLACEperformance for new keys - #14704 Optimizes an internal memory accounting
- RediSearch/RediSearch#10246 Write operations block on a read lock held throughout vector range query result collection (MOD-16437)
- RediSearch/RediSearch#10392 Vector search: Reduce HNSW index memory usage with one-byte per-node locks (MOD-16696).
- RedisJSON/RedisJSON#1617 JSON - memory object footprint improvements (MOD-16608)
Modules API
- #15350
RedisModuleEvent_ClusterTopologyChange- cluster topology change - #15327
REDISMODULE_SUBEVENT_FORK_CHILD_*- allow multi-threaded modules can quiesce background work beforefork() - #15373
REDISMODULE_SUBEVENT_CLUSTER_SLOT_MIGRATION_MIGRATE_MODULE_PROPAGATE_END- inject commands after ASM replication stream - #15242
RedisModule_AddPostNotificationJobForKey- binds deferred work to a...