Valkey 8.0.0 RC1 release notes¶
Upgrade urgency levels¶
- LOW: No need to upgrade unless there are new features you want to use.
- MODERATE: Program an upgrade of the server, but it’s not urgent.
- HIGH: There is a critical bug that may affect a subset of users. Upgrade!
- CRITICAL: There is a critical bug affecting MOST USERS. Upgrade ASAP.
- SECURITY: There are security fixes in the release.
Valkey 8.0.0 RC1 - Released Thu 1 Aug 2024¶
Upgrade urgency LOW.
This is the first release candidate of Valkey 8.0, with performance, reliability, and observability improvements. It includes asynchronous I/O threading, better cluster scaling reliability, dual primary-replica channel for faster full synchronization, per-slot metrics for resource management, and experimental RDMA support for increased throughput and reduced latency. This release is fully compatible with Redis OSS 7.2.4.
Un-deprecated Commands - Cluster¶
- Un-deprecate the
CLUSTER SLOTScommand. (#536)
New/Modified Commands - Core¶
- Add
SCRIPT SHOWsub-command to dump scripts via SHA1. (#617) - Add
NOSCORESoption toZSCANcommand. (#324) - Add
NOVALUESoption toHSCANcommand. (Redis#12765) - Expose Lua
os.clock()API to allow scripts to determine how long the script has been executing. (Redis#12971) - Implement
CLIENT KILL MAXAGE <MAXAGE>. (Redis#12299) - Allow running
WAITAOFin scripts, removeNOSCRIPTflag. (Redis#12977) - Support
XREAD[GROUP]withBLOCKoption in scripts. (Redis#12596) - Introduce
+as a special ID for the last item in stream onXREADCommand. (Redis#7388, Redis#13117)
New/Modified Commands - Cluster¶
- Introduce
CLUSTER SLOT-STATScommand which allows tracking of per slot metrics for key count, CPU utilization, network bytes in, and network bytes out. (#20, #351) - Add
TIMEOUToption toCLUSTER SETSLOTcommand. (#556, #445)
New/Modified Metrics - Core¶
- Introduce per-client metrics for network traffic and command execution
in
CLIENT LISTandCLIENT INFO. (#327) - Add metrics for DB memory overhead and rehashing status to
INFO MEMORYandMEMORY STATS. (Redis#12913) - Add
pubsub_clientsmetric toINFO CLIENTS. (Redis#12849) - Add metrics for client buffer limit disconnections to
INFO. (Redis#12476) - Add metrics for monitoring clients using
WATCHcommand and watched keys. (Redis#12966) - Added allocator muzzy memory metrics to
INFO MEMORYandMEMORY STATS. (Redis#12996)
New Features - Core¶
- Support replica redirect for read/write operations to primary in standalone mode. (#325)
- Add server config for cluster blacklist TTL. (#738)
- Add availability zone server config. (#700)
New Features - Cluster¶
- Support IPv4 and IPv6 dual stack and client-specific IPs in clusters. (#736)
- Support
BY/GEToptions forSORT/SORT_ROin cluster mode when pattern implies a single slot. (Redis#12728)
Compatibility Improvements - Core¶
- Derive RDB and module child process names based on server start name for compatibility. (#454)
- Update server identity in
serverPanicoutput based onextended-redis-compatibilityconfig. (#415)
Compatibility Improvements - Sentinel¶
- Accept
redis-sentinelto start Valkey in sentinel mode. (#731)
Performance/Efficiency Improvements - Core¶
- Introduce dual channel for more efficient full sync replication. (#60)
- Introduce async IO threading for improved multi-threaded performance. (#763, #758)
- Embed key directly in main dictionary entry for improved memory efficiency. (#541)
- Use thread-local storage to reduce atomic contention in updating memory metrics. (#674)
- Reduce redundant calls to
prepareClientToWritefor continuousaddReply*. (#670) - Optimize the logic for checking conversion to skip list during
ZADDoperations. (#806) - Optimize
sdsfreewithzfree_with_sizeto avoid redundant size calculation. (#453) - Combine events to eliminate redundant
kevent(2)calls. (#638) - Introduce shared query buffer for client reads to reduce memory usage. (#258)
- Optimize CRC64 performance for large batches by processing bytes in parallel. (#350)
- Use
SOCK_NONBLOCKto reduce system calls for outgoing connections. (#293) - Enable
accept4()detection on specific versions of various platforms. (#294) - Convert CRC16 slot table to fixed-size array for improved memory efficiency. (Redis#13112)
- Run
SCRIPT FLUSHtruly asynchronously and close Lua interpreter in a background thread. (Redis#13087) - Optimize
DELcommand to avoid redundant deletions for expired keys. (Redis#13080) - Improve defragmentation for large bins to enhance memory efficiency. (Redis#12996)
- Optimize hash table resizing to include empty dictionaries. (Redis#12819)
- Reduce performance impact of dictionary rehashing by optimizing bucket processing. (Redis#12899)
- Optimize performance for simultaneous client
[P|S]UNSUBSCRIBE. (Redis#12838) - Optimize CPU cache efficiency during dictionary rehashing. (Redis#5692)
- Optimize
ZRANGEoffset location from linear search to skip list jump. (Redis#12450) - Fix
aeSetDontWaittiming to avoid unnecessary waits inaeProcessEvent. (Redis#12068)
Performance/Efficiency Improvements - Cluster¶
- Add lightweight cluster message header for Pub/Sub messages. (#654)
- Minor performance improvement in Valkey cluster by avoid initializing key
buffer in
getKeysResult. (#631) - Cache
CLUSTER SLOTSresponse to improve throughput and reduce latency. (#53) - Replace slots_to_channels radix tree with slot-specific dictionaries for shard channels. (Redis#12804)
- Optimize
KEYScommand when pattern includes hashtag and implies a single slot. (Redis#12754) - Optimize
SCANcommand withMATCHwhen pattern implies a single slot. (Redis#12536) - Replace cluster metadata with slot specific dictionaries to reduce memory usage when using Valkey cluster. (Redis#11695, Redis#12704)
Reliability Improvements - Core¶
- Limit tracking custom errors (e.g. from Lua) while allowing normal errors to be tracked (#500, Redis#13141)
- Manage maximum number of new connections per cycle to prevent connection storms. (Redis#12178)
Reliability Improvements - Cluster¶
- Reduce fail-over time in Valkey cluster when multiple sequential fail-overs
occurred by resetting
failover_auth_timewhen the new primary node goes down. (#782) - Restrict node failure marking to primaries with assigned slots. (#634)
- Enhance cluster meet reliability under link failures. (#461)
- Improve reliability of slot migration in Valkey clusters. (#445)
Usability Improvements - Core¶
- Re-brand and refine latency report messages. (#644)
- Optimize
ACL LOADto avoid disconnecting clients whose users are unchanged. (Redis#12171)
Usability Improvements - Cluster¶
- Adjust log levels for various cluster-related logs to improve clarity. (#633)
- Maintain deterministic ordering of replica(s) in
CLUSTER SLOTSresponse. (#265)
Usability Improvements - CLI¶
- Add prompt message when Ctrl-C is pressed in
valkey-cli. (#702) - Keep an in-memory history of all commands in
valkey-cliso that sensitive commands can be shown within the same session. (Redis#12862)
Module Improvements - Core¶
- Add
ValkeyModule_TryCalloc()andValkeyModule_TryRealloc()to handle allocation failures gracefully. (Redis#12985) - Make
ValkeyModule_Yieldthread-safe by handling events in the main thread. (Redis#12905) - Allow modules to declare new ACL categories. (Redis#12486)
Module Improvements - Cluster¶
- Add API
ValkeyModule_ClusterKeySlotandValkeyModule_ClusterCanonicalKeyNameInSlot. (Redis#13069)
Behavior Changes - Core¶
- Re-brand the Lua debugger. (#603)
- Change default pidfile from
redis.pidtovalkey.pid. (#378) - Abort transactions on nested
MULTIorWATCHcommands. (#723) - Ensure keys that match the
SCANfilter are not lazily expired and return an error for invalid types. (#501) - Rename
redisin AOF logs and proc title tovalkey-aof-rewrite. (#393) - Change default syslog-ident from
redistovalkey. (#390) - Update
RedistoValkeyinserverLogmessages in server.c file. (#231) - Remove
Redisfrom various error reply messages. See GitHub PR for more details. (#206) - Reject empty strings for configs
dir,dbfilename, andcluster-config-file. (#636) - Change key-spec flag from
RWtoOWforSINTERSTOREcommand. (Redis#12917) - Return more precise error messages for some cases verifying keys during script execution. (Redis#12707)
- Return errors for
BITCOUNTandBITPOSwith non-existing keys or invalid arguments instead of zero. (Redis#11734) - Validate
BITCOUNTarguments before key existence check. (Redis#12394) - Redact ACL username information and mark
*-key-file-passconfigs as sensitive. (Redis#12860) - Allow
MULTI/EXECto use a small amount of additional memory beyond the used-memory limit. (Redis#12961)
Behavior Changes - Cluster¶
- Allow
CLUSTER NODES/INFO/MYID/MYSHARDIDduring loading state. (#596) - Make cluster replicas return
ASKandTRYAGAINduring slot migration. (#495)
Behavior Changes - Sentinel¶
- Replace
master-reboot-down-after-periodwithprimary-reboot-down-after-periodinsentinel.conf. (#647)
Bug Fixes - Core¶
- Fix a bug that caused LRU/LFU inconsistencies for some integer objects. (#250)
- Fix a bug where Valkey may use a sub-optimal encoding for some data types. (Redis#13148)
- Fix propagation of
entries_readby callingstreamPropagateGroupIDunconditionally. (Redis#12898) - Fix race condition issues between the main thread and module threads. (Redis#12817)
- Wake blocked clients ASAP in next
beforeSleepforWAITAOF. (Redis#12627) - Fix crash in crash-report and improve thread management with RW locks. (Redis#12623)
Bug Fixes - Cluster¶
- Fix a bug where a shard returns the incorrect slot slot information in
CLUSTER SHARDScommand on primary failure. (#790) - Allow module authentication to succeed when the cluster is down. (#693)
- Fix
PONGmessage processing for primary-ship tracking during fail-overs. (Redis#13055) - Prevent double freeing of cluster link with
DEBUG CLUSTERLINK KILL. (Redis#12930) - Unsubscribe all clients from replica for shard channel if the primary ownership changes. (Redis#12577)
Bug Fixes - Tooling¶
- Fix
valkey-check-aofmisidentifying data in manifest format as MP-AOF. (Redis#12958) - Fix
valkey-clito respect the--countoption without requiring--pattern. (Redis#13092) - Fix
valkey-benchmarkto distribute operations across all slots owned by a node in cluster mode. (Redis#12986)
Internal Codebase Improvements¶
- Enable debug asserts for cluster and sentinel tests. (#588)
- Introduce a minimal debugger for Tcl integration test suite. (#683)
- Set up clang-format GitHub action for automated code formatting checks. (#538)
- Replace custom atomic logic with C11 _Atomics. (#490)
- Add fast fail option for Tcl test cases. (#482)
- Introduce a simple unit test framework. (#460)
- An initial simple unit test framework. (#344)
- Introduce Codecov for automated code coverage tracking. (#316)
- Remove deprecated
redis-tribCLI program. (#281) - Add
-fno-omit-frame-pointerto default compilation flags to improve debuggability. (Redis#12973) - Refactor the per-slot dict-array db.c into a new kvstore data structure. (Redis#12822)
- Unified database rehash method for both standalone and cluster modes. (Redis#12848)
- Clarify and decouple the sampling logic in eviction to improve readability. (Redis#12781)
- Rewrite large printf calls to smaller ones for readability. (Redis#12257)
Experimental¶
- Introduce Valkey Over RDMA transport (experimental). (#477)