| Category | Highlights |
|---|---|
| New Features | Async I/O threading for multi-threaded performance; dual-channel full sync replication; CLUSTER SLOT-STATS for per-slot metrics; SCRIPT SHOW sub-command; NOSCORES for ZSCAN, NOVALUES for HSCAN; replica redirect for reads in standalone mode; RDMA transport (experimental); IPv4/IPv6 dual stack in clusters; availability zone config |
| Improvements | 41% SUNION / 27% SDIFF performance gains; shared query buffer reduces per-client memory; key embedded directly in main dict entry; thread-local memory metrics reduce atomic contention; CRC64 parallelized for large batches; CLUSTER SLOTS response caching; per-client network and command metrics in CLIENT LIST; ZRANGE skip list jump optimization; defrag improvements for large bins |
| Bug Fixes | AOF incorrectly disabled after RDB load; AOF base suffix corruption during rewrites; TLS async IO thread crash under concurrent read/write; cluster gossip not updating IP/port on primary change; CLUSTER SETSLOT timing race during slot migration; cluster config not saved before shutdown; LRU/LFU inconsistency for integer objects |
| Breaking Changes | Default pidfile renamed from redis.pid to valkey.pid; default syslog-ident changed from redis to valkey; BITCOUNT/BITPOS now return errors for non-existing keys instead of zero; nested MULTI or WATCH inside a transaction is now aborted; sentinel config renames master-reboot-down-after-period to primary-reboot-down-after-period; replicas flush old data before loading new RDB during disk-based replication |
| Deprecations | CLUSTER SLOTS command un-deprecated and restored to active support; deprecated redis-trib CLI program removed |
What Does Async I/O Threading Mean for Valkey 8.0 Throughput?
Valkey 8.0 introduces async I/O threading, meaning network reads and writes can now be offloaded from the main event loop to dedicated I/O threads, giving the server significantly more headroom under high concurrency. This is one of the most impactful changes in this release for teams running Valkey on multi-core machines.
In practice, this does not change the single-threaded command execution model. Commands are still processed sequentially on the main thread. What changes is that the cost of moving bytes to and from clients is distributed across threads, which is often the actual bottleneck under high connection counts or large value sizes.
To enable I/O threading, configure the number of I/O threads in your valkey.conf:
# valkey.conf
io-threads 4
io-threads-do-reads yes
Watch out for over-provisioning threads. On a 4-core host, setting io-threads to 8 typically hurts more than it helps due to context switching overhead. A good starting point is (number of physical cores / 2), then benchmark your actual workload.
How Does Dual-Channel Replication Improve Full Sync in Valkey 8.0?
Valkey 8.0 introduces a dual-channel replication path that separates the RDB snapshot transfer from the replication backlog, allowing replicas to receive live write commands during a full sync instead of buffering them entirely on the primary. This directly reduces the risk of backlog overflow and primary memory pressure during large or slow full syncs.
Most teams running large datasets with busy write rates have encountered the painful scenario where a full sync causes the replication buffer to overflow, forcing yet another full sync in a loop. Dual-channel replication addresses the root cause by streaming replication commands on a separate channel while the RDB is still being transferred.
This feature is enabled by default and requires no configuration change. Replicas must be running Valkey 8.0 or later to negotiate the dual-channel protocol; older replicas fall back to the traditional single-channel path transparently.
What Is the New CLUSTER SLOT-STATS Command in Valkey 8.0?
CLUSTER SLOT-STATS is a new command that exposes per-slot metrics including key count, CPU utilization, network bytes in, and network bytes out, giving operators visibility into hot slot patterns that were previously invisible without external instrumentation.
This matters if you are running a Valkey cluster and have suspected uneven load distribution but lacked the data to confirm it. With CLUSTER SLOT-STATS, you can now pinpoint exactly which hash slots are receiving the most traffic, identify which keys are mapping to those slots, and rebalance your key design or sharding strategy accordingly.
CLUSTER SLOT-STATS SLOTSRANGE 0 16383
The command supports filtering by slot range and returns structured data suitable for scraping into your monitoring pipeline. Teams using Prometheus can pull this data periodically and alert on outlier slots before they cause latency spikes or OOM conditions.
What Behavior Changes in Valkey 8.0 Could Break Existing Applications?
Valkey 8.0 ships several behavior changes that teams should validate in staging before promoting to production. The most operationally significant is that BITCOUNT and BITPOS now return errors for non-existing keys instead of returning zero, which is a silent semantic change that can break application code relying on the old default-zero behavior.
- BITCOUNT / BITPOS on missing keys: Previously returned 0. Now returns an error. Review any code paths that call these commands without a prior EXISTS check.
- Nested MULTI / WATCH: Calling MULTI or WATCH inside an open transaction now aborts the transaction immediately. This closes a long-standing ambiguity but may affect client libraries that issue WATCH defensively.
- Replica flush on RDB load: Replicas now flush old data only after validating the incoming RDB file rather than before. This prevents partial data loss if the primary crashes mid-transfer but changes the window during which old data is visible on the replica.
- pidfile and syslog-ident defaults: Default pidfile is now valkey.pid and syslog-ident is valkey. Any init scripts, systemd units, or log parsers referencing the old redis.pid or redis syslog identity will need updating.
- Sentinel config rename: The sentinel.conf option master-reboot-down-after-period has been renamed to primary-reboot-down-after-period. Old configs must be updated before restarting sentinel nodes.
What Memory and Command-Level Performance Improvements Ship in Valkey 8.0?
Valkey 8.0 delivers a broad set of micro-optimizations that compound into meaningful gains at production scale. The headline numbers are a 41% improvement for SUNION and a 27% improvement for SDIFF, achieved by optimizing how temporary set objects are allocated and freed during those operations.
Below the surface, the release also embeds dictionary keys directly in the main hash table entry structure, eliminating a pointer indirection that previously added allocation overhead for every key stored. Combined with a shared query buffer for client reads -- meaning multiple clients share a single allocated buffer rather than each maintaining their own -- memory fragmentation under high connection counts is noticeably reduced.
Additional wins include:
- Thread-local storage for memory metric updates reduces atomic operations on hot paths.
- CRC64 computation is parallelized for large batches, improving RDB save and replication throughput.
- ZRANGE now uses skip list jumps to locate offsets rather than linear traversal, benefiting large sorted sets.
- CLUSTER SLOTS responses are cached, reducing CPU overhead for topology-heavy client libraries.
- Per-client network and command metrics are now exposed in CLIENT LIST and CLIENT INFO, enabling precise traffic attribution without external proxies.
Frequently Asked Questions about Valkey 8.0
Is Valkey 8.0 compatible with Redis OSS 7.2.4?
Yes, Valkey 8.0 is fully wire-compatible with Redis OSS 7.2.4, meaning existing client libraries and application code will continue to work without modification.
How do I enable async I/O threading in Valkey 8.0?
Set io-threads to the desired thread count and io-threads-do-reads to yes in your valkey.conf; a reasonable starting value is half the number of physical cores, and you should benchmark your specific workload to find the optimal setting before deploying to production.
Does upgrading to Valkey 8.0 require changes to application code that uses BITCOUNT or BITPOS?
If your application calls BITCOUNT or BITPOS on keys that may not exist and expects a zero return value, you must update that code to handle the new error response or add an explicit EXISTS check beforehand, as the old zero-return behavior is gone in 8.0.
What happens to replicas running an older Valkey version when the primary is upgraded to 8.0?
Older replicas that do not support the dual-channel replication protocol will fall back transparently to the traditional single-channel full sync path, so mixed-version clusters are safe during a rolling upgrade.
Is the RDMA transport in Valkey 8.0 ready for production use?
No, RDMA support is explicitly marked experimental in this release and should not be used in production environments; it is intended for evaluation and feedback on RDMA-equipped hardware.
What should I update in my systemd or init scripts when upgrading to Valkey 8.0?
Update any references from redis.pid to valkey.pid in PIDFile directives, update log parsers that filter on the redis syslog identity to use valkey instead, and if running Sentinel, rename master-reboot-down-after-period to primary-reboot-down-after-period in your sentinel.conf before restarting sentinel nodes.