Skip to content

Releases: redis/redis

8.10.0

Choose a tag to compare

@YaacovHazan YaacovHazan released this 29 Jul 17:20

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 - new MAXCOUNT and MAXSIZE arguments 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 - new EXCLUDEEMPTY argument to exclude series with no reported samples
  • Performance improvements

Binary distributions

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, or BLMOVEM could remain blocked after SORT with STORE replaced 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

Choose a tag to compare

@YaacovHazan YaacovHazan released this 23 Jul 19:30

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

Choose a tag to compare

@YaacovHazan YaacovHazan released this 23 Jul 19:27

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

8.4.5

Choose a tag to compare

@YaacovHazan YaacovHazan released this 23 Jul 19:24

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

8.2.8

Choose a tag to compare

@YaacovHazan YaacovHazan released this 23 Jul 19:20

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

7.4.10

Choose a tag to compare

@YaacovHazan YaacovHazan released this 23 Jul 18:01

Update urgency: SECURITY: There is a security fix 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

7.2.15

Choose a tag to compare

@YaacovHazan YaacovHazan released this 23 Jul 17:57

Update urgency: SECURITY: There is a security fix 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

6.2.23

Choose a tag to compare

@YaacovHazan YaacovHazan released this 23 Jul 17:52

Update urgency: SECURITY: There is a security fix 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

8.10-RC2

8.10-RC2 Pre-release
Pre-release

Choose a tag to compare

@YaacovHazan YaacovHazan released this 20 Jul 18:23

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

8.10-RC1 Pre-release
Pre-release

Choose a tag to compare

@YaacovHazan YaacovHazan released this 20 Jul 15:10

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 - 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 New Languages Search: Stemmer support for Malay and Tagalog languages (RED-132425)
  • RediSearch/RediSearch#9291 FT.AGGREGATE now supports whole-document fetching using COLLECT, in-group SORTBY/LIMIT, and deduplication control within a single query. (RED-177887)
  • RediSearch/RediSearch#8169, RediSearch/RediSearch#8236, RediSearch/RediSearch#9234, RediSearch/RediSearch#9443FT.SEARCH, FT.AGGREGATE, FT.HYBRID: enforce query TIMEOUT more strictly; long-running queries require vertical scaling (multi-threaded execution). (RED-132340)
    • use FAIL when correctness requires rejecting timed-out queries. With search-workers > 0` (the default), the timeout is enforced preemptively
    • use RETURN when best-effort partial results are acceptable and strictness not enforced at post-processing time.
    • use RETURN_STRICT when best-effort partial results are acceptable and strictness enforced on post-processing.
    • New parameter search-global-timeout acting as cap value to timeout setting on query time TIMEOUT param
  • 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...
Read more