Releases: redis/redis
8.0-M02
This is the second Milestone of Redis Community Edition 8.0.
Milestones are non-feature-complete pre-releases. Pre-releases are not suitable for production use.
Once we reach feature-completeness we will release RC1.
Headlines:
8.0-M02 introduces significant performance improvements. Both Alpine and Debian Docker images are now available on Docker Hub. Additional distributions will be introduced in upcoming pre-releases. In addition, Redis Query Engine now supports both horizontal and vertical scaling for search, query and vector workloads.
Supported upgrade paths (by replication or persistence) to 8.0-M02
- From previous Redis versions, without modules
The following upgrade paths (by replication or persistence) to 8.0-M02 are not yet tested and will be introduced in upcoming pre-releases:
- From previous Redis versions with modules (RediSearch, RedisJSON, RedisTimeSeries, RedisBloom)
- From Redis Stack 7.2 or 7.4
Security fixes
- (CVE-2024-31449) Lua library commands may lead to stack overflow and potential RCE.
- (CVE-2024-31227) Potential Denial-of-service due to malformed ACL selectors.
- (CVE-2024-31228) Potential Denial-of-service due to unbounded pattern matching.
Bug fixes
- #13539 Hash: Fix key ref for a hash that no longer has fields with expiration on
RENAME
/MOVE
/SWAPDB
/RESTORE
- #13512 Fix
TOUCH
command from a script in no-touch mode - #13468 Cluster: Fix cluster node config corruption caused by mixing shard-id and non-shard-id versions
- #13608 Cluster: Fix
GET #
option inSORT
command
Modules API
- #13526 Extend
RedisModule_OpenKey
to read also expired keys and subkeys
Performance and resource utilization improvements
- #11884 Optimize
ZADD
andZRANGE*
commands - #13530 Optimize
SSCAN
command in case of listpack or intset encoding - #13531 Optimize
HSCAN
/ZSCAN
command in case of listpack encoding - #13520 Optimize commands that heavily rely on bulk/mbulk replies (example of
LRANGE
) - #13566 Optimize
ZUNION[STORE]
by avoiding redundant temporary dict usage - #13567 Optimize
SUNION
/SDIFF
commands by avoiding redundant temporary dict usage - #11533 Avoid redundant
lpGet
to boostquicklistCompare
- #13412 Reduce redundant call of
prepareClientToWrite
when calladdReply*
continuously
Notes
- Additional distributions, upgrade paths, features, and improvements will be introduced in upcoming pre-releases.
- With the GA release of 8.0 we will deprecate Redis Stack.
7.4.1
Upgrade urgency SECURITY: See security fixes below.
Security fixes
- (CVE-2024-31449) Lua library commands may lead to stack overflow and potential RCE.
- (CVE-2024-31227) Potential Denial-of-service due to malformed ACL selectors.
- (CVE-2024-31228) Potential Denial-of-service due to unbounded pattern matching.
7.2.6
Upgrade urgency SECURITY: See security fixes below.
Security fixes
- (CVE-2024-31449) Lua library commands may lead to stack overflow and potential RCE.
- (CVE-2024-31227) Potential Denial-of-service due to malformed ACL selectors.
- (CVE-2024-31228) Potential Denial-of-service due to unbounded pattern matching.
Bug fixes
- Fixed crashes in cluster mode (#13315)
6.2.16
8.0-M01
This is the first Milestone of Redis Community Edition 8.0.
Milestones are non-feature-complete pre-releases. Pre-releases are not suitable for production use.
Once we reach feature-completeness we will release RC1.
Headlines:
Redis 8.0 introduces new data structures: JSON, time series, and 5 probabilistic data structures (previously available as separate Redis modules) and incorporates Redis scalable query engine (including vector search).
8.0-M01 is available as a Docker image and can be downloaded from Docker Hub. Additional distributions will be introduced in upcoming pre-releases.
Supported upgrade paths (by replication or persistence) to 8.0-M01
- From previous Redis versions, without modules
The following upgrade paths (by replication or persistence) to 8.0-M01 are not yet tested and will be introduced in upcoming pre-releases:
- From previous Redis versions with modules (RediSearch, RedisJSON, RedisTimeSeries, RedisBloom)
- From Redis Stack 7.2 or 7.4
New Features in binary distributions
- 7 new data structures: JSON, Time series, Bloom filter, Cuckoo filter, Count-min sketch, Top-k, t-digest
- Redis scalable query engine (including vector search)
Potentially breaking changes
- #12272
GETRANGE
returns an empty bulk when the negative end index is out of range - #12395 Optimize
SCAN
command when matching data type
Bug fixes
- #13510 Fix
RM_RdbLoad
to enable AOF after RDB loading is completed - #13489
ACL CAT
- return module commands - #13476 Fix a race condition in the
cache_memory
offunctionsLibCtx
- #13473 Fix incorrect lag due to trimming stream via
XTRIM
command - #13338 Fix incorrect lag field in
XINFO
when tombstone is after thelast_id
of the consume group - #13470 On
HDEL
of last field - update the global hash field expiration data structure - #13465 Cluster: Pass extensions to node if extension processing is handled by it
- #13443 Cluster: Ensure validity of myself when loading cluster config
- #13422 Cluster: Fix
CLUSTER SHARDS
command returns empty array
Modules API
- #13509 New API calls:
RM_DefragAllocRaw
,RM_DefragFreeRaw
, andRM_RegisterDefragCallbacks
- defrag API to allocate and free raw memory
Performance and resource utilization improvements
- #13503 Avoid overhead of comparison function pointer calls in listpack
lpFind
- #13505 Optimize
STRING
datatype write commands - #13499 Optimize
SMEMBERS
command - #13494 Optimize
GEO*
commands reply - #13490 Optimize
HELLO
command - #13488 Optimize client query buffer
- #12395 Optimize
SCAN
command when matching data type - #13529 Optimize
LREM
,LPOS
,LINSERT
, andLINDEX
commands - #13516 Optimize
LRANGE
and other commands that perform several writes to client buffers per call - #13431 Avoid
used_memory
contention when updating from multiple threads
Other general improvements
- #13495 Reply
-LOADING
on replica while flushing the db
CLI tools
- #13411 redis-cli: Fix wrong
dbnum
showed after the client reconnected
Notes
- No backward compatibility for replication or persistence.
- Additional distributions, upgrade paths, features, and improvements will be introduced in upcoming pre-releases.
- With the GA release of 8.0 we will deprecate Redis Stack.
7.4.0
This is the General Availability release of Redis Community Edition 7.4.
Changes to new 7.4 features (compared to 7.4 RC2)
- #13391,#13438 Hash - expiration of individual fields: RDB file format changes
- #13372 Hash - expiration of individual fields: rename and fix counting of
expired_subkeys
metric - #13372 Hash - expiration of individual fields: rename
INFO
keyspace field tosubexpiry
Configuration parameters
- #13400 Add hide-user-data-from-log - allows hiding user data from the log file
Bug fixes
7.4-rc2
This is the second Release Candidate for Redis Community Edition 7.4.
Performance and resource utilization improvements
- #13296 Optimize CPU cache efficiency
Changes to new 7.4 new features (compared to 7.4 RC1)
- #13343 Hash - expiration of individual fields: when key does not exist - reply with an array (nonexisting code for each field)
- #13329 Hash - expiration of individual fields: new keyspace event:
hexpired
Modules API - Potentially breaking changes to new 7.4 features (compared to 7.4 RC1)
- #13326 Hash - expiration of individual fields: avoid lazy expire when called from a Modules API function
7.4-rc1
Note: License changed - see LICENSE.txt
Upgrade urgency LOW: This is the first Release Candidate for Redis Community Edition 7.4.
Here is a comprehensive list of changes in this release compared to 7.2.5.
New Features
- #13303 Hash - expiration of individual fields. 9 commands were introduced:
HEXPIRE
andHPEXPIRE
set the remaining time to live for specific fieldsHEXPIREAT
andHPEXPIREAT
set the expiration time to a UNIX timestamp for specific fieldsHPERSIST
removes the expiration for specific fieldsHEXPIRETIME
andHPEXPIRETIME
get the expiration time for specific fieldsHTTL
andHPTTL
get the remaining time to live for specific fields
- #13117
XREAD
: new id value+
to start reading from the last message - #12765
HSCAN
: newNOVALUES
flag to report only field names - #12728
SORT
,SORT_RO
: allowBY
andGET
options in cluster mode when the pattern maps to the same slot as the key - #12299
CLIENT KILL
: new optional filter:MAXAGE maxage
- kill connections older thanmaxage
seconds - #12971 Lua: expose
os.clock()
API for getting the elapsed time of Lua code execution - #13276 Allow
SPUBLISH
command withinMULTI ... EXEC
transactions on replica
Bug fixes
- #12898
XREADGROUP
: fix entries-read inconsistency between master and replicas - #13042
SORT ... STORE
: fix created lists to respect list compression and packing configs - #12817, #12905 Fix race condition issues between the main thread and module threads
- #12577 Unsubscribe all clients from replica for shard channel if the master ownership changes
- #12622
WAITAOF
could timeout or hang if used after a module command that propagated effects only to replicas and not to AOF - #11734
BITCOUNT
andBITPOS
with nonexistent key and illegal arguments return an error, not 0 - #12394
BITCOUNT
: check for wrong argument before checking if key exists - #12961 Allow execution of read-only transactions when out of memory
- #13274 Fix crash when a client performs ACL change that disconnects itself
- #13311 Cluster: Fix crash due to unblocking client during slot migration
Security improvements
- #13108 Lua: LRU eviction for scripts generated with
EVAL
*** BEHAVIOR CHANGE *** - #12961 Restrict the total request size of
MULTI ... EXEC
transactions - #12860 Redact ACL username information and mark
*-key-file-pass configs
as sensitive
Performance and resource utilization improvements
- #12838 Improve performance when many clients call
PUNSUBSCRIBE
/SUNSUBSCRIBE
simultaneously - #12627 Reduce lag when waking
WAITAOF
clients and there is not much traffic - #12754 Optimize
KEYS
when pattern includes hashtag and implies a single slot - #11695 Reduce memory and improve performance by replacing cluster metadata with slot specific dictionaries
- #13087
SCRIPT FLUSH ASYNC
now does not block the main thread - #12996 Active memory defragmentation efficiency improvements
- #12899 Improve performance of read/update operation during rehashing
- #12536
SCAN ... MATCH
: Improve performance when the pattern implies cluster slot - #12450
ZRANGE ... LIMIT
: improved performance
Other general improvements
- #13133 Lua: allocate VM code with jemalloc instead of libc and count it as used memory *** BEHAVIOR CHANGE ***
- #12171
ACL LOAD
: do not disconnect all clients *** BEHAVIOR CHANGE *** - #13020 Allow adjusting defrag configurations while active defragmentation is running
- #12949 Increase the accuracy of avg_ttl (the average keyspace keys TTL)
- #12977 Allow running
WAITAOF
in scripts - #12782 Implement TCP Keep-Alives across most Unix-like systems
- #12707 Improved error codes when rejecting scripts in cluster mode
- #12596 Support
XREAD ... BLOCK
in scripts; rejected only if it ends up blocking
New metrics
- #12849
INFO
:pubsub_clients
- number of clients in Pub/Sub mode - #12966
INFO
:watching_clients
- number of clients that are watching keys - #12966
INFO
:total_watched_keys
- number of watched keys - #12476
INFO
:client_query_buffer_limit_disconnections
- count client input buffer OOM events - #12476
INFO
:client_output_buffer_limit_disconnections
- count client output buffer OOM events - #12996
INFO
:allocator_muzzy
- memory returned to the OS but still shows as RSS until the OS reclaims it - #13108
INFO
:evicted_scripts
- number of evicted eval scripts. Users can check it to see if they are abusing EVAL - #12996
MEMORY STATS
:allocator.muzzy
- memory returned to the OS but still shows as RSS until the OS reclaims it - #12913
INFO MEMORY
mem_overhead_db_hashtable_rehashing
- memory resharding overhead (only the memory that will be released soon) - #12913
MEMORY STATS
:overhead.db.hashtable.lut
- total overhead of dictionary buckets in databases - #12913
MEMORY STATS
:overhead.db.hashtable.rehashing
- temporary memory overhead of database dictionaries currently being rehashed - #12913
MEMORY STATS
:db.dict.rehashing.count
- number of top level dictionaries currently being rehashed - #12966
CLIENT LIST
:watch
- number of keys each client is currently watching
Modules API
- #12985 New API calls:
RM_TryCalloc
andRM_TryRealloc
- allow modules to handle memory allocation failures gracefully - #13069 New API call:
RM_ClusterKeySlot
- which slot a key will hash to - #13069 New API call:
RM_ClusterCanonicalKeyNameInSlot
- get a consistent key that will map to a slot - #12486 New API call:
RM_AddACLCategory
- allow modules to declare new ACL categories
Configuration parameters
- #12178 New configuration parameters:
max-new-connections-per-cycle
andmax-new-tls-connections-per-cycle
to limit the number of new client connections per event-loop cycle - #7351 Rename some CPU configuration parameters for style alignment. Added alias to the old names to avoid breaking change
CLI tools
- #10609 redis-cli: new
-t <timeout>
argument: specify server connection timeout in seconds - #11315 redis-cli: new
-4
and-6
flags to prefer IPV4 or IPV6 on DNS lookup - #12862 redis-cli: allows pressing up arrow to return any command (including sensitive commands which are still not persisted)
- #12543 redis-cli: add reverse history search (like Ctrl+R in terminals)
- #12826 redis-cli: add
--keystats
and--keystats-samples
to combines--memkeys
and--bigkeys
with additional distribution data - #12735 redis-cli: fix:
--bigkeys
and--memkeys
now work on cluster replicas - #9411 redis-benchmark: add support for binary strings
- #12986 redis-benchmark: fix: pick random slot for a node to distribute operation across slots
7.2.5
Upgrade urgency MODERATE: Program an upgrade of the server, but it's not urgent.
Bug fixes
- A single shard cluster leaves failed replicas in CLUSTER SLOTS instead of removing them (#12824)
- Crash in LSET command when replacing small items and exceeding 4GB (#12955)
- Blocking commands timeout is reset due to re-processing command (#13004)
- Conversion of numbers in Lua args to redis args can fail. Bug introduced in 7.2.0 (#13115)
Bug fixes in CLI tools
7.2.4
Upgrade urgency SECURITY: See security fixes below.
Security fixes
- (CVE-2023-41056) In some cases, Redis may incorrectly handle resizing of memory
buffers which can result in incorrect accounting of buffer sizes and lead to
heap overflow and potential remote code execution.