Compact hashes cut memory; new HIMPORT, LMOVEM, BACKUP commands
v8.10-rc1
15 features42 fixesThis release15 featuresNew capabilities42 fixesBug fixesAI-tallied from the release notes
From the original release noteView original ↗
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
Fetched July 20, 2026


