8.0.0-rc1
Pre-releaseUpgrade 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 onXREAD
Command. (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
inCLIENT LISTandCLIENT INFO. (#327) - Add metrics for DB memory overhead and rehashing status to
INFO MEMORY
andMEMORY 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-compatibility
config. (#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 ingetKeysResult. (#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 resettingfailover_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-period
insentinel.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 callingstreamPropagateGroupID
unconditionally. (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)
Special Thanks
We appreciate the efforts of all who contributed code to this release!
lan Slang, Binbin, Brennan, Chen Tianjie, Cui Fliter, Daniel House, Darren Jiang,
David Carlier, Debing Sun, Dingrui, Dmitry Polyakovsky, Eran Liberty, Gabi Ganam,
George Guimares, Guillaume Koenig, Guybe, Harkrishn Patro, Hassaan Khan, Hwang Si Yeon,
ICHINOSE Shogo, icy17, Ikko Eltociear Ashimine, iKun, Itamar Haber, Jachin, Jacob Murphy,
Jason Elbaum, Jeff Liu, John Sully, John Vandenberg, Jonathan Wright, Jonghoonpark, Joe Hu,
Josiah Carlson, Juho Kim, judeng, Jun Luo, K.G. Wang, Karthik Subbarao, Karthick Ariyaratnam,
kell0gg, Kyle Kim, Leibale Eidelman, LiiNen, Lipeng Zhu, Lior Kogan, Lior Lahav, Madelyn Olson,
Makdon, Maria Markova, Mason Hall, Matthew Douglass, meiravgri, michalbiesek, Mike Dolan,
Mikel Olasagasti Uranga, Moshe Kaplan, mwish, naglera, NAM UK KIM, Neal Gompa, nitaicaro,
Nir Rattner, Oran Agra, Ouri Half, Ozan Tezcan, Parth, PatrickJS, Pengfei Han, Pierre, Ping Xie,
poiuj, pshankinclarke, ranshid, Ronen Kalish, Roshan Khatri, Samuel Adetunji, Sankar, secwall,
Sergey Fedorov, Sher_Sun, Shivshankar, skyfirelee, Slava Koyfman, Subhi Al Hasan, sundb,
Ted Lyngmo, Thomas Fline, tison, Tom Morris, Tyler Bream, uriyage, Viktor Söderqvist, Vitaly,
Vitah Lin, VoletiRam, w. ian douglas, WangYu, Wen Hui, Wenwen Chen, Yaacov Hazan, Yanqi Lv,
Yehoshua Hershberg, Yves LeBras, zalj, Zhao Zhao, zhenwei pi, zisong.cw