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 SLOTS
command. (#536)
New/Modified Commands - Core¶
- Add
SCRIPT SHOW
sub-command to dump scripts via SHA1. (#617) - Add
NOSCORES
option toZSCAN
command. (#324) - Add
NOVALUES
option toHSCAN
command. (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
WAITAOF
in scripts, removeNOSCRIPT
flag. (Redis#12977) - Support
XREAD[GROUP]
withBLOCK
option 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-STATS
command which allows tracking of per slot metrics for key count, CPU utilization, network bytes in, and network bytes out. (#20, #351) - Add
TIMEOUT
option toCLUSTER SETSLOT
command. (#556, #445)
New/Modified Metrics - Core¶
- Introduce per-client metrics for network traffic and command execution
in
CLIENT LIST
andCLIENT INFO
. (#327) - Add metrics for DB memory overhead and rehashing status to
INFO MEMORY
andMEMORY STATS
. (Redis#12913) - Add
pubsub_clients
metric toINFO CLIENTS
. (Redis#12849) - Add metrics for client buffer limit disconnections to
INFO
. (Redis#12476) - Add metrics for monitoring clients using
WATCH
command and watched keys. (Redis#12966) - Added allocator muzzy memory metrics to
INFO MEMORY
andMEMORY 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/GET
options forSORT/SORT_RO
in 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
serverPanic
output based onextended-redis-compatibility
config. (#415)
Compatibility Improvements - Sentinel¶
- Accept
redis-sentinel
to 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
prepareClientToWrite
for continuousaddReply*
. (#670) - Optimize the logic for checking conversion to skip list during
ZADD
operations. (#806) - Optimize
sdsfree
withzfree_with_size
to 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_NONBLOCK
to 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 FLUSH
truly asynchronously and close Lua interpreter in a background thread. (Redis#13087) - Optimize
DEL
command 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
ZRANGE
offset location from linear search to skip list jump. (Redis#12450) - Fix
aeSetDontWait
timing 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 SLOTS
response to improve throughput and reduce latency. (#53) - Replace slots_to_channels radix tree with slot-specific dictionaries for shard channels. (Redis#12804)
- Optimize
KEYS
command when pattern includes hashtag and implies a single slot. (Redis#12754) - Optimize
SCAN
command withMATCH
when 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_time
when 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 LOAD
to 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 SLOTS
response. (#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-cli
so 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_Yield
thread-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_ClusterKeySlot
andValkeyModule_ClusterCanonicalKeyNameInSlot
. (Redis#13069)
Behavior Changes - Core¶
- Re-brand the Lua debugger. (#603)
- Change default pidfile from
redis.pid
tovalkey.pid
. (#378) - Abort transactions on nested
MULTI
orWATCH
commands. (#723) - Ensure keys that match the
SCAN
filter are not lazily expired and return an error for invalid types. (#501) - Rename
redis
in AOF logs and proc title tovalkey-aof-rewrite
. (#393) - Change default syslog-ident from
redis
tovalkey
. (#390) - Update
Redis
toValkey
inserverLog
messages in server.c file. (#231) - Remove
Redis
from 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
RW
toOW
forSINTERSTORE
command. (Redis#12917) - Return more precise error messages for some cases verifying keys during script execution. (Redis#12707)
- Return errors for
BITCOUNT
andBITPOS
with non-existing keys or invalid arguments instead of zero. (Redis#11734) - Validate
BITCOUNT
arguments before key existence check. (Redis#12394) - Redact ACL username information and mark
*-key-file-pass
configs as sensitive. (Redis#12860) - Allow
MULTI/EXEC
to use a small amount of additional memory beyond the used-memory limit. (Redis#12961)
Behavior Changes - Cluster¶
- Allow
CLUSTER NODES/INFO/MYID/MYSHARDID
during loading state. (#596) - Make cluster replicas return
ASK
andTRYAGAIN
during slot migration. (#495)
Behavior Changes - Sentinel¶
- Replace
master-reboot-down-after-period
withprimary-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_read
by callingstreamPropagateGroupID
unconditionally. (Redis#12898) - Fix race condition issues between the main thread and module threads. (Redis#12817)
- Wake blocked clients ASAP in next
beforeSleep
forWAITAOF
. (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 SHARDS
command on primary failure. (#790) - Allow module authentication to succeed when the cluster is down. (#693)
- Fix
PONG
message 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-aof
misidentifying data in manifest format as MP-AOF. (Redis#12958) - Fix
valkey-cli
to respect the--count
option without requiring--pattern
. (Redis#13092) - Fix
valkey-benchmark
to 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-trib
CLI program. (#281) - Add
-fno-omit-frame-pointer
to 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)
Get expert help¶
If you need assistance, visit the community forum for comprehensive and free database knowledge, or contact our Percona Database Experts for professional support and services.