Announcement8.10-RC1
Redis 8.10-RC1 Release Candidate
First Release Candidate of Redis 8.10 introducing new features including compact hash encoding, new list and set commands, backup functionality, and extensions to RediSearch, RedisJSON, and RedisTimeSeries. Pre-release is feature-complete but not suitable for production use.
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
- #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 Stemmer support for Malay and Tagalog languages (RED-132425)
- RediSearch/RediSearch#9291
FT.AGGREGATE- newCOLLECTreducer: separate remote and local reducer invocations (RED-177887) - RediSearch/RediSearch#8169, RediSearch/RediSearch#8236, RediSearch/RediSearch#9234, RediSearch/RediSearch#9443 —
FT.SEARCH,FT.AGGREGATE,FT.HYBRID: enforce queryTIMEOUTmore strictly- The
search-on-timeoutpolicy now offers three options:FAIL— reject timed-out queries. Withsearch-workers> 0` (the default), the timeout is enforced preemptivelyRETURN(default) — return best-effort partial results, without enforcing strictness during post-processingRETURN_STRICT(new) — return best-effort partial results while enforcing the timeout through the post-processing (result) pipeline
- Queries executed on the main thread (i.e., when
search-workersis 0) are capped bysearch-_max-foreground-timeout-limit
- The
- 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 specific key from a keyspace-notification handler
Configuration parameters
- #15364 Compact hashes:
hash-rdb-load-min-template-entries- minimum field count to convert a plain hash to a template during loadhash-rdb-load-max-template-entries- maximum field count for load-time conversionhash-rdb-load-template-disassembly-threshold- minimum number of keys a converted template must end up with to be kept
Metrics
- #15364 Compact hashes:
INFO STATS-hash_templates- number of distinct compact hash templatesINFO STATS-hash_template_keys- total number of keys backed by a compact hash templateINFO MEMORY-used_memory_hash_templates- total memory used by all compact hash templatesMEMORY STATS-hash.templates- total memory used by all compact hash templatesMEMORY USAGE <key>reports the key’s own + plus its share of a compact hash template cost
CLI tools
- #15352 Adds
--latency-percentiles <p1,p2,...>to--latency/--latency-history: reporting user-chosen percentiles - #15262
redis-cli --cluster rebalance- CROSSSLOT error on when using-userwithout-a - #15338
redis-cli --cluster reshardandrebalancenow move slots with server-side atomic slot migration
release-candidateredis-coreredisearchredisjonredistimeseriesfeatures
Source: original entry ↗