Skip to content

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 to ZSCAN command. (#324)
  • Add NOVALUES option to HSCAN 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, remove NOSCRIPT flag. (Redis#12977)
  • Support XREAD[GROUP] with BLOCK option in scripts. (Redis#12596)
  • Introduce + as a special ID for the last item in stream on XREAD 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 to CLUSTER SETSLOT command. (#556, #445)

New/Modified Metrics - Core

  • Introduce per-client metrics for network traffic and command execution in CLIENT LIST and CLIENT INFO. (#327)
  • Add metrics for DB memory overhead and rehashing status to INFO MEMORY and MEMORY STATS. (Redis#12913)
  • Add pubsub_clients metric to INFO 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 and MEMORY 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 for SORT/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 on extended-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 continuous addReply*. (#670)
  • Optimize the logic for checking conversion to skip list during ZADD operations. (#806)
  • Optimize sdsfree with zfree_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 in aeProcessEvent. (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 with MATCH 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() and ValkeyModule_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 and ValkeyModule_ClusterCanonicalKeyNameInSlot. (Redis#13069)

Behavior Changes - Core

  • Re-brand the Lua debugger. (#603)
  • Change default pidfile from redis.pid to valkey.pid. (#378)
  • Abort transactions on nested MULTI or WATCH 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 to valkey-aof-rewrite. (#393)
  • Change default syslog-ident from redis to valkey. (#390)
  • Update Redis to Valkey in serverLog 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, and cluster-config-file. (#636)
  • Change key-spec flag from RW to OW for SINTERSTORE command. (Redis#12917)
  • Return more precise error messages for some cases verifying keys during script execution. (Redis#12707)
  • Return errors for BITCOUNT and BITPOS 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 and TRYAGAIN during slot migration. (#495)

Behavior Changes - Sentinel

  • Replace master-reboot-down-after-period with primary-reboot-down-after-period in sentinel.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 calling streamPropagateGroupID unconditionally. (Redis#12898)
  • Fix race condition issues between the main thread and module threads. (Redis#12817)
  • Wake blocked clients ASAP in next beforeSleep for WAITAOF. (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.