Skip to content

Releases: redis/redis

7.0-rc1

31 Jan 13:01
Compare
Choose a tag to compare
7.0-rc1 Pre-release
Pre-release

Introduction to the Redis 7.0 release

Redis 7.0 includes several new user-facing features, significant performance
optimizations, and many other improvements. It also includes changes that
potentially break backwards compatibility with older versions. We urge users to
review the release notes carefully before upgrading.

In particular, users should be aware of the following changes:

  1. Redis 7 stores AOF as multiple files in a folder; see Multi-Part AOF below.
  2. Redis 7 uses a new version 10 format for RDB files, which is incompatible
    with older versions.
  3. Redis 7 converts ziplist encoded keys to listpacks on the fly when loading
    an older RDB format. Conversion applies to loading a file from disk or
    replicating from a Redis master and will slightly increase loading time.
  4. See sections about breaking changes mentioned below.

Here is a comprehensive list of changes in this release compared to 6.2.6.
Each one includes the PR number that added it so that you can get more details
at https://github.com/redis/redis/pull/

New Features

New user commands or command arguments

  • ZMPOP, BZMPOP commands (#9484)
  • LMPOP, BLMPOP commands (#9373)
  • SINTERCARD, ZINTERCARD commands (#8946, #9425)
  • SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB (#8621)
  • EXPIRETIME and PEXPIRETIME commands (#8474)
  • EXPIRE command group supports NX/XX/GT/LT options (#2795)
  • SET command supports combining NX and GET flags (#8906)
  • BITPOS, BITCOUNT accepts BIT index (#9324)
  • EVAL_RO, EVALSHA_RO command variants, to run on read-only replicas (#8820)
  • SORT_RO command, to run on read-only replicas (#9299)
  • SHUTDOWN arguments: NOW, FORCE, ABORT (#9872)
  • FUNCTION *, FCALL, FCALL_RO - https://redis.io/commands/function-load
  • CONFIG SET/GET can handle multiple configs atomically, in one call (#9748, #9914)
  • QUIT promoted to be a proper command, HOST: and POST demoted (#9798)
  • XADD supports auto sequence number via -* (#9217)

New administrative and introspection commands and command arguments

  • COMMAND DOCS (#9656, #10056, #10104)
  • COMMAND LIST (#9504)
  • COMMAND INFO accepts sub-commands as args, and no args too (#9504, #10056)
  • LATENCY HISTOGRAM (#9462)
  • CLUSTER LINKS (#9774)
  • CLUSTER DELSLOTSRANGE and CLUSTER ADDSLOTSRANGE (#9445)
  • CLIENT NO-EVICT (#8687)
  • ACL DRYRUN (#9974)
  • SLOWLOG GET supports passing in -1 to get all entries (#9018)

Command replies that have been extended

  • COMMAND and COMMAND INFO extended with tips, key-specs and sub-commands
    see https://redis.io/commands/command
  • ACL CAT, COMMAND LIST list sub-commands (#10127)
  • MODULE LIST reply includes path and args (#4848)
  • OBJECT ENCODING returns listpack instead of ziplist (#8887, #9366)
  • CLUSTER SLOTS hostname support (#9530)
  • COMMAND command: Added the blocking and module flags (#10104, #9656)

Potentially Breaking Changes

  • Modifying the bind parameter to a non-default value will no longer implicitly
    disable protected-mode (#9034)
  • Remove EVAL script verbatim replication, propagation, and deterministic
    execution logic (#9812)
    This has been deprecated and off by default since Redis 6 and is no longer
    supported.
  • ACL: pub/sub channels are blocked by default (acl-pubsub-default=resetchannels) (#10181)
  • SCRIPT LOAD and SCRIPT FLUSH are no longer propagated to replicas / AOF (#9812)
  • ACL: Declarations of duplicate ACL users in startup files and command line
    arguments will result in an error, whereas previously the last declaration
    would overwrite the others. (#9330)
  • Replication: TTLs are always replicated as absolute (not relative) millisecond
    timestamps (#8474)
  • Fixes in handling multi-key commands with expired keys on writable replicas (#9572)
  • CONFIG SET maxmemory returns before starting eviction (#10019)
  • AOF: The new Multi-Part mechanism stores data as a set of multiple files in a
    designated folder (#9788)
  • Remove STRALGO command, preserve LCS a standalone command which only works on
    keys (#9799)
  • Remove gopher protocol support (#9057)
  • MODULE and DEBUG commands disabled (protected) by default, for better security (#9920)
  • Snapshot-creating and other admin commands in MULTI/EXEC transactions are now
    rejected (#10015)
  • PING is now rejected with -MASTERDOWN when replica-serve-stale-data=no (#9757)
  • ACL GETUSER reply now uses ACL syntax for keys and channels (#9974)
  • COMMAND reply drops random and sort-for-scripts flags, which are now part
    of command tips (#10104)
  • LPOP/RPOP with count against non-existing list return null array (#10095)
  • INFO commandstats now shows the stats per sub-command (#9504)
  • ZPOPMIN/ZPOPMAX used to produce wrong replies when count is 0 with non-zset (#9711)
  • LPOP/RPOP used to produce wrong replies when count is 0 (#9692)
  • CONFIG GET bind now returns the current value in effect, even if the implicit
    default is in use (#9034)
  • CONFIG REWRITE now rewrites the list of modules to load (#4848)
  • Config: repl-diskless-sync is now set to yes by default (#10092)
  • When shutting down, Redis can optionally wait for replicas to catch up on the
    replication link (#9872)
  • Most CONFIG SET, REWRITE, RESETSTAT commands are now allowed during loading (#9878)
  • READONLY and READWRITE commands are now allowed when loading and on stale
    replicas (#7425)
  • Fix ACL category for SELECT, WAIT, ROLE, LASTSAVE, READONLY, READWRITE, ASKING (#9208)
  • RESET is now allowed even when on unauthenticated connections (#9798)
  • SCRIPT LOAD is now allowed on stale replicas (#10126)

Security improvements

  • Sensitive configs and commands blocked (protected) by default (#9920)
  • Improve bind and protected-mode config handling (#9034)
  • Sentinel: avoid logging auth-pass value (#9652)
  • redis-cli: sensitive commands bypass the history file (#8895)

Performance and resource utilization improvements

  • Significant memory saving and latency improvements in cluster mode (#9356)
  • Significant memory savings in case of many hash or zset keys (#9228)
  • Replication backlog and replicas use one global shared replication buffer (#9166)
  • Significant reduction of copy-on-write memory overheads (#8974)
  • Free unused capacity in the cluster send buffer (#9255)
  • Memory efficiency, make full use of client struct memory for reply buffers (#8968)
  • Replace ziplist with listpack in Hash, List, Zset (#8887, #9366, #9740)
  • Add support for list type to store elements larger than 4GB (#9357)
  • Reuse temporary client objects for blocked clients by module (#9940)
  • Remove command argument count limit, dynamically grow argv buffer (#9528)
  • Optimize list type operations to seek from the nearest end (#9454)
  • Improvements in fsync to avoid large writes to disk (#9409)
  • BITSET and BITFIELD SET only propagated when the value actually changed (#9403)
  • Improve latency when a client is unblocked by module timer (#9593)

Other General Improvements

  • Make partial sync possible after master reboot (#8015)
  • Always create a base AOF file when redis starts from empty (#10102)
  • Replica keep serving data during repl-diskless-load=swapdb for better
    availability (#9323)

Changes in CLI tools

  • redis-cli --json, and -2 options (#9954)
  • redis-cli --scan, add sleep interval option (#3751)
  • redis-cli --replica optimization, skip RDB generation (#10044)
  • redis-cli --functions-rdb, generate RDB with Functions only (#9968)
  • redis-cli -X, take an arbitrary arg from stdin, extend --cluster call take -x (#9980)
  • redis-benchmark -x takes an argument from stdin (#9130)
  • redis-benchmark, Added URI support (#9314)
  • redis-cli monitor and pubsub can be aborted with Ctrl+C, keeping the cli alive (#9347)

Platform / toolchain support related improvements

  • Upgrade jemalloc 5.2.1 (#9623)
  • Fix RSS metrics on NetBSD and OpenBSD (#10116, #10149)
  • Chec...
Read more

6.2.6

04 Oct 11:04
Compare
Choose a tag to compare

Upgrade urgency: SECURITY, contains fixes to security issues.

Security Fixes:

  • (CVE-2021-41099) Integer to heap buffer overflow handling certain string
    commands and network payloads, when proto-max-bulk-len is manually configured
    to a non-default, very large value [reported by yiyuaner].
  • (CVE-2021-32762) Integer to heap buffer overflow issue in redis-cli and
    redis-sentinel parsing large multi-bulk replies on some older and less common
    platforms [reported by Microsoft Vulnerability Research].
  • (CVE-2021-32687) Integer to heap buffer overflow with intsets, when
    set-max-intset-entries is manually configured to a non-default, very large
    value [reported by Pawel Wieczorkiewicz, AWS].
  • (CVE-2021-32675) Denial Of Service when processing RESP request payloads with
    a large number of elements on many connections.
  • (CVE-2021-32672) Random heap reading issue with Lua Debugger [reported by
    Meir Shpilraien].
  • (CVE-2021-32628) Integer to heap buffer overflow handling ziplist-encoded
    data types, when configuring a large, non-default value for
    hash-max-ziplist-entries, hash-max-ziplist-value, zset-max-ziplist-entries
    or zset-max-ziplist-value [reported by sundb].
  • (CVE-2021-32627) Integer to heap buffer overflow issue with streams, when
    configuring a non-default, large value for proto-max-bulk-len and
    client-query-buffer-limit [reported by sundb].
  • (CVE-2021-32626) Specially crafted Lua scripts may result with Heap buffer
    overflow [reported by Meir Shpilraien].

Bug fixes that involve behavior changes:

  • GEO* STORE with empty source key deletes the destination key and return 0 (#9271)
    Previously it would have returned an empty array like the non-STORE variant.
  • PUBSUB NUMPAT replies with number of patterns rather than number of subscriptions (#9209)
    This actually changed in 6.2.0 but was overlooked and omitted from the release notes.

Bug fixes that are only applicable to previous releases of Redis 6.2:

  • Fix CLIENT PAUSE, used an old timeout from previous PAUSE (#9477)
  • Fix CLIENT PAUSE in a replica would mess the replication offset (#9448)
  • Add some missing error statistics in INFO errorstats (#9328)

Other bug fixes:

  • Fix incorrect reply of COMMAND command key positions for MIGRATE command (#9455)
  • Fix appendfsync to always guarantee fsync before reply, on MacOS and FreeBSD (kqueue) (#9416)
  • Fix the wrong mis-detection of sync_file_range system call, affecting performance (#9371)

CLI tools:

  • When redis-cli received ASK response, it didn't handle it (#8930)

Improvements:

  • Add latency monitor sample when key is deleted via lazy expire (#9317)
  • Sanitize corrupt payload improvements (#9321, #9399)
  • Delete empty keys when loading RDB file or handling a RESTORE command (#9297, #9349)

6.0.16

04 Oct 11:03
Compare
Choose a tag to compare

Upgrade urgency: SECURITY, contains fixes to security issues.

Security Fixes:

  • (CVE-2021-41099) Integer to heap buffer overflow handling certain string
    commands and network payloads, when proto-max-bulk-len is manually configured
    to a non-default, very large value [reported by yiyuaner].
  • (CVE-2021-32762) Integer to heap buffer overflow issue in redis-cli and
    redis-sentinel parsing large multi-bulk replies on some older and less common
    platforms [reported by Microsoft Vulnerability Research].
  • (CVE-2021-32687) Integer to heap buffer overflow with intsets, when
    set-max-intset-entries is manually configured to a non-default, very large
    value [reported by Pawel Wieczorkiewicz, AWS].
  • (CVE-2021-32675) Denial Of Service when processing RESP request payloads with
    a large number of elements on many connections.
  • (CVE-2021-32672) Random heap reading issue with Lua Debugger [reported by
    Meir Shpilraien].
  • (CVE-2021-32628) Integer to heap buffer overflow handling ziplist-encoded
    data types, when configuring a large, non-default value for
    hash-max-ziplist-entries, hash-max-ziplist-value, zset-max-ziplist-entries
    or zset-max-ziplist-value [reported by sundb].
  • (CVE-2021-32627) Integer to heap buffer overflow issue with streams, when
    configuring a non-default, large value for proto-max-bulk-len and
    client-query-buffer-limit [reported by sundb].
  • (CVE-2021-32626) Specially crafted Lua scripts may result with Heap buffer
    overflow [reported by Meir Shpilraien].

Other bug fixes:

  • Fix appendfsync to always guarantee fsync before reply, on MacOS and FreeBSD (kqueue) (#9416)
  • Fix the wrong mis-detection of sync_file_range system call, affecting performance (#9371)
  • Fix replication issues when repl-diskless-load is used (#9280)

5.0.14

04 Oct 11:02
Compare
Choose a tag to compare

Upgrade urgency: SECURITY, contains fixes to security issues.

Security Fixes:

  • (CVE-2021-41099) Integer to heap buffer overflow handling certain string
    commands and network payloads, when proto-max-bulk-len is manually configured
    to a non-default, very large value [reported by yiyuaner].
  • (CVE-2021-32762) Integer to heap buffer overflow issue in redis-cli and
    redis-sentinel parsing large multi-bulk replies on some older and less common
    platforms [reported by Microsoft Vulnerability Research].
  • (CVE-2021-32687) Integer to heap buffer overflow with intsets, when
    set-max-intset-entries is manually configured to a non-default, very large
    value [reported by Pawel Wieczorkiewicz, AWS].
  • (CVE-2021-32675) Denial Of Service when processing RESP request payloads with
    a large number of elements on many connections.
  • (CVE-2021-32672) Random heap reading issue with Lua Debugger [reported by
    Meir Shpilraien].
  • (CVE-2021-32628) Integer to heap buffer overflow handling ziplist-encoded
    data types, when configuring a large, non-default value for
    hash-max-ziplist-entries, hash-max-ziplist-value, zset-max-ziplist-entries
    or zset-max-ziplist-value [reported by sundb].
  • (CVE-2021-32627) Integer to heap buffer overflow issue with streams, when
    configuring a non-default, large value for proto-max-bulk-len and
    client-query-buffer-limit [reported by sundb].
  • (CVE-2021-32626) Specially crafted Lua scripts may result with Heap buffer
    overflow [reported by Meir Shpilraien].

6.2.5

21 Jul 18:15
Compare
Choose a tag to compare

Upgrade urgency: SECURITY, contains fixes to security issues that affect
authenticated client connections on 32-bit versions. MODERATE otherwise.

Fix integer overflow in BITFIELD on 32-bit versions (CVE-2021-32761).
An integer overflow bug in Redis version 2.2 or newer can be exploited using the
BITFIELD command to corrupt the heap and potentially result with remote code
execution.

Bug fixes that involve behavior changes:

  • Change reply type for ZPOPMAX/MIN with count in RESP3 to nested array (#8981).
    Was using a flat array like in RESP2 instead of a nested array like ZRANGE does.
  • Fix reply type for HRANDFIELD and ZRANDMEMBER when key is missing (#9178).
    Was using a null array instead of an empty array.
  • Fix reply type for ZRANGESTORE when source key is missing (#9089).
    Was using an empty array like ZRANGE instead of 0 (used in the STORE variant).

Bug fixes that are only applicable to previous releases of Redis 6.2:

  • ZRANDMEMBER WITHSCORES with negative COUNT may return bad score (#9162)
  • Fix crash after CLIENT UNPAUSE when threaded I/O config is enabled (#9041)
  • Fix XTRIM or XADD with LIMIT may delete more entries than the limit (#9048)
  • Fix build issue with OpenSSL 1.1.0 (#9233)

Other bug fixes:

  • Fail EXEC command in case a watched key is expired (#9194)
  • Fix SMOVE not to invalidate dest key (WATCH and tracking) when member already exists (#9244)
  • Fix SINTERSTORE not to delete dest key when getting a wrong type error (#9032)
  • Fix overflows on 32-bit versions in GETBIT, SETBIT, BITCOUNT, BITPOS, and BITFIELD (#9191)
  • Improve MEMORY USAGE on stream keys (#9164)
  • Set TCP keepalive on inbound cluster bus connections (#9230)
  • Fix diskless replica loading to recover from RDB short read on module AUX data (#9199)
  • Fix race in client side tracking (#9116)
  • Fix ziplist length updates on big-endian platforms (#2080)

CLI tools:

  • redis-cli cluster import command may issue wrong MIGRATE command, sending COPY instead of REPLACE (#8945)
  • redis-cli --rdb fixes when using "-" to write to stdout (#9136, #9135)
  • redis-cli support for RESP3 set type in CSV and RAW output (#7338)

Modules:

  • Module API for getting current command name (#8792)
  • Fix RM_StringTruncate when newlen is 0 (#3718)
  • Fix CLIENT UNBLOCK crashing modules without timeout callback (#9167)

6.0.15

21 Jul 18:10
Compare
Choose a tag to compare

Upgrade urgency: SECURITY, contains fixes to security issues that affect
authenticated client connections on 32-bit versions. MODERATE otherwise.

Fix integer overflow in BITFIELD on 32-bit versions (CVE-2021-32761).
An integer overflow bug in Redis version 2.2 or newer can be exploited using the
BITFIELD command to corrupt the heap and potentially result with remote code
execution.

Bug fixes that involve behavior changes:

  • Change reply type for ZPOPMAX/MIN with count in RESP3 to nested array (#8981).
    Was using a flat array like in RESP2 instead of a nested array like ZRANGE does.

Bug fixes:

  • Fail EXEC command in case a watched key is expired (#9194)
  • Fix SMOVE not to invalidate dest key (WATCH and tracking) when member already exists (#9244)
  • Fix SINTERSTORE not to delete dest key when getting a wrong type error (#9032)
  • Fix overflows on 32-bit versions in GETBIT, SETBIT, BITCOUNT, BITPOS, and BITFIELD (#9191)
  • Set TCP keepalive on inbound cluster bus connections (#9230)
  • Fix ziplist length updates on big-endian platforms (#2080)
  • Fix diskless replica loading to recover from RDB short read on module AUX data (#9199)
  • Fix race in client side tracking (#9116)
  • If diskless repl child is killed, make sure to reap the child pid (#7742)
  • Add a timeout mechanism for replicas stuck in fullsync (#8762)

CLI tools:

  • redis-cli cluster import support source and target that require auth (#7994)
  • redis-cli cluster import command may issue wrong MIGRATE command, sending COPY instead of REPLACE (#8945)
  • redis-cli support for RESP3 set type in CSV and RAW output (#7338)

5.0.13

21 Jul 18:08
Compare
Choose a tag to compare

Upgrade urgency: SECURITY, contains fixes to security issues that affect
authenticated client connections on 32-bit versions. MODERATE otherwise.

Fix integer overflow in BITFIELD on 32-bit versions (CVE-2021-32761).
An integer overflow bug in Redis version 2.2 or newer can be exploited using the
BITFIELD command to corrupt the heap and potentially result with remote code
execution.

Bug fixes:

  • Fix overflows on 32-bit versions in GETBIT, SETBIT, BITCOUNT, BITPOS, and BITFIELD (#9191)
  • Fix ziplist length updates on big-endian platforms (#2080)

6.2.4

01 Jun 14:07
Compare
Choose a tag to compare

Upgrade urgency: SECURITY, Contains fixes to security issues that affect
authenticated client connections. MODERATE otherwise.

Fix integer overflow in STRALGO LCS (CVE-2021-32625)
An integer overflow bug in Redis version 6.0 or newer can be exploited using the
STRALGO LCS command to corrupt the heap and potentially result with remote code
execution. This is a result of an incomplete fix by CVE-2021-29477.

Bug fixes that are only applicable to previous releases of Redis 6.2:

  • Fix crash after a diskless replication fork child is terminated (#8991)
  • Fix redis-benchmark crash on unsupported configs (#8916)

Other bug fixes:

  • Fix crash in UNLINK on a stream key with deleted consumer groups (#8932)
  • SINTERSTORE: Add missing keyspace del event when none of the sources exist (#8949)
  • Sentinel: Fix CONFIG SET of empty string sentinel-user/sentinel-pass configs (#8958)
  • Enforce client output buffer soft limit when no traffic (#8833)

Improvements:

  • Hide AUTH passwords in MIGRATE command from slowlog (#8859)

6.0.14

01 Jun 14:06
Compare
Choose a tag to compare

Upgrade urgency: SECURITY, Contains fixes to security issues that affect
authenticated client connections. MODERATE otherwise.

Fix integer overflow in STRALGO LCS (CVE-2021-32625)
An integer overflow bug in Redis version 6.0 or newer can be exploited using the
STRALGO LCS command to corrupt the heap and potentially result with remote code
execution. This is a result of an incomplete fix by CVE-2021-29477.

Other bug fixes:

  • Fix crash in UNLINK on a stream key with deleted consumer groups (#8932)
  • SINTERSTORE: Add missing keyspace del event when none of the sources exist (#8949)

6.2.3

03 May 20:01
Compare
Choose a tag to compare

Upgrade urgency: SECURITY, Contains fixes to security issues that affect
authenticated client connections. LOW otherwise.

Integer overflow in STRALGO LCS command (CVE-2021-29477):
An integer overflow bug in Redis version 6.0 or newer could be exploited using
the STRALGO LCS command to corrupt the heap and potentially result in remote
code execution. The integer overflow bug exists in all versions of Redis
starting with 6.0.

Integer overflow in COPY command for large intsets (CVE-2021-29478):
An integer overflow bug in Redis 6.2 could be exploited to corrupt the heap and
potentially result in remote code execution. The vulnerability involves
changing the default set-max-intset-entries configuration value, creating a
large set key that consists of integer values and using the COPY command to
duplicate it. The integer overflow bug exists in all versions of Redis starting
with 2.6, where it could result with a corrupted RDB or DUMP payload, but not
exploited through COPY (which did not exist before 6.2).

Bug fixes that are only applicable to previous releases of Redis 6.2:

  • Fix memory leak in moduleDefragGlobals (#8853)
  • Fix memory leak when doing lazy freeing client tracking table (#8822)
  • Block abusive replicas from sending commands that could assert and crash redis (#8868)

Other bug fixes:

  • Use a monotonic clock to check for Lua script timeout (#8812)
  • redis-cli: Do not use unix socket when we got redirected in cluster mode (#8870)

Modules:

  • Fix RM_GetClusterNodeInfo() to correctly populate master id (#8846)