megachangelog
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 - new MAXCOUNT and MAXSIZE arguments to cap the cumulative reply entries and size
  • #15337 New SCRIPT_RUNNER command 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 - new COLLECT reducer: separate remote and local reducer invocations (RED-177887)
  • RediSearch/RediSearch#8169, RediSearch/RediSearch#8236, RediSearch/RediSearch#9234, RediSearch/RediSearch#9443FT.SEARCH, FT.AGGREGATE, FT.HYBRID: enforce query TIMEOUT more strictly
    • The search-on-timeout policy now offers three options:
      • FAIL — reject timed-out queries. With search-workers > 0` (the default), the timeout is enforced preemptively
      • RETURN (default) — return best-effort partial results, without enforcing strictness during post-processing
      • RETURN_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-workers is 0) are capped by search-_max-foreground-timeout-limit
  • 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/sizeof and empty operators on string, array, object, and nodelist
    • in and nin operators: 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 - new EXCLUDEEMPTY argument to exclude series with no reported samples (RED-132536)

Bug fixes (compared to 8.8.0)

Performance and resource utilization improvements (compared to 8.8.0)

  • #15376 Optimize lpSeek() by validating entries only when necessary
  • #15345 Optimize wide HSET/HMSET on 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 XREADGROUP performance
  • #15397 Improve RESTORE REPLACE performance 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 before fork()
  • #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 load
    • hash-rdb-load-max-template-entries - maximum field count for load-time conversion
    • hash-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 templates
    • INFO STATS - hash_template_keys - total number of keys backed by a compact hash template
    • INFO MEMORY - used_memory_hash_templates - total memory used by all compact hash templates
    • MEMORY STATS - hash.templates - total memory used by all compact hash templates
    • MEMORY 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 -user without -a
  • #15338 redis-cli --cluster reshard and rebalance now move slots with server-side atomic slot migration
release-candidateredis-coreredisearchredisjonredistimeseriesfeatures

Source: original entry ↗