github valkey-io/valkey 9.0.0-rc1
Valkey 9.0.0-rc1

latest release: 8.0.5
pre-release17 days ago

Valkey 9.0 release notes

Upgrade urgency levels:

Level Meaning
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 9.0.0-rc1 - August 14, 2025

Upgrade urgency LOW: This is the first release candidate of Valkey 9.0.0, with
performance improvements, atomic slot migrations, hash field expiration, and numbered databases in cluster mode,
as well as a whole host of new items as listed below.

New Features

New Configs

Logging and Tooling Improvements

  • Add node pfail and fail count to cluster info metrics by @hpatro (#1910)
  • Introduce support for lttng based tracing by @artikell (#2070)

Performance/Efficiency Improvements

  • Optimize bitcount command by SIMD by @chzhoo (#1741)
  • Save RDB file to disk using a background thread on replica(s) (#1784)
  • Improve replication stability by prioritizing replication traffic in the replica by @xbasel (#1838)
  • Optimize hyperloglog commands with ARM NEON SIMD instructions by @xbasel (#1859)
  • Optimize BITCOUNT using ARM NEON SIMD by @xbasel (#1867)
  • Optimize string-to-integer performance using AVX512 by @zhulipeng (#1944)
  • Improve system responsiveness by limiting number of new cluster link connections per cycle by @hpatro (#2009)
  • Optimize hash table performance using SIMD by @zhulipeng (#2030)
  • Improve performance of network operations by directly writing responses to clients by @xbasel (#2078)
  • Allow shrinking hashtables in low memory situations by @Fusl (#2095)
  • Optimize string2ll with load-time CPU feature check using IFUNC resolver by @zhulipeng (#2099)
  • Optimize WATCH by equalStringObjects early length check by @vitahlin (#2107)
  • Optimize GEORADIUS command performance with pre-allocated buffer by @chzhoo (#2116)
  • Improve zcount performance by combing range element ranks calculation with range elements search to @SoftlyRaining (#2129)
  • Optimize scan/sscan/hscan/zscan commands by replacing list with vector by @chzhoo (#2160)

Cluster

  • Trigger manual failover on SIGTERM / shutdown to cluster primary by @enjoy-binbin (#1091)
  • Add CLUSTER FLUSHSLOT command by @wuranxx (#1384)
  • Allow replicas to become primaries without data by using CLUSTER REPLICATE NO ONE by @skolosov-snap (#1674)
  • Add cluster bus port out of range error message for CLUSTER MEET command by @hwware (#1686)
  • Add cluster-manual-failover-timeout to configure the timeout for manual failover by @enjoy-binbin (#1690)

Module

  • Add new module API flag to bypass command validation by @sungming2 (#1357)

Bug Fixes

  • Avoid shard id update of replica if it doesn't match with primary shard id by @hpatro (#573)
  • Change "Redis ver." to "Valkey ver." in LOLWUT output by @sarthakaggarwal97 (#1559)
  • Fix temp file leak during replication error handling by @enjoy-binbin (#1721)
  • Fix raxRemove crash at memcpy() due to key size exceeds max Rax size by @VoletiRam (#1722)
  • Respect process umask when creating data files by @kronwerk (#1725)
  • Fix error "SSL routines::bad length" when connTLSWrite is called second time with smaller buffer by @zori-janea (#1737)
  • cmd's out bytes need count deferred reply by @soloestoy (#1760)
  • Enable TCP_NODELAY by default in incoming and outgoing connections by @sungming2 (#1763)
  • Ignore stale gossip packets that arrive out of order by @enjoy-binbin (#1777)
  • Remove unicode optimization in Lua cjson library by @rjd15372 (#1785)
  • Save config file and broadcast PONG message on configEpoch change by @enjoy-binbin (#1813)
  • Fix engine crash on module client blocking during keyspace events by @yairgott (#1819)
  • Fix bug where invalidation messages were getting sent to closing clients by @madolson (#1823)
  • Fix ACL LOAD crash on replica since the primary client don't has a user by @bogdanp05 (#1842)
  • Fix RANDOMKEY infinite loop during CLIENT PAUSE by @li-benson (#1850)
  • Improve clarity of errors for GEO commands when member does not exist by @chx9 (#1943)
  • Fix panic in primary when blocking shutdown after previous block with timeout by @murphyjacob4 (#1948)
  • fix cluster slot stats assertion during promotion of replica by @Fusl (#1950)
  • Fix incorrect lag reported in XINFO GROUPS by @nesty92 (#1952)
  • Fix crash during TLS handshake with I/O threads by @uriyage (#1955)
  • Disallow sending REPLY ON / OFF / SKIP inside a multi-exec transaction by @sarthakaggarwal97 (#1966)
  • Fix random element in skewed sparse hash table by @zuiderkwast (#2085)
  • Allow mixing quoted and unquoted inline args by @Fusl (#2098)
  • Only mark the client reprocessing flag when unblocked on keys by @ranshid (#2109)
  • CLIENT UNBLOCK should't be able to unpause paused clients by @enjoy-binbin (#2117)
  • Fix memory corruption in sharded pubsub unsubscribe by @uriyage (#2137)
  • Detect SSL_new() returning NULL in outgoing connections by @zuiderkwast (#2140)
  • Correctly handle large cluster bus extensions which may have resulted in dropped cluster packets by @madolson (#2144)
  • Converge divergent shard-id persisted in nodes.conf to primary's shard ID by @hpatro (#2174)
  • Fix replica can't finish failover when config epoch is outdated by @enjoy-binbin (#2178)
  • Fix CLUSTER SLOTS/NODES showing wrong port after updating port/tls-port by @enjoy-binbin (#2186)
  • Fix use-after-free when active expiration triggers hashtable to shrink by @gusakovy (#2257)
  • Redact user data when a module crashes for not handling I/O errors enabled by @YueTang-Vanessa (#2274)
  • Generate a new shard_id when the replica executes CLUSTER RESET SOFT by @enjoy-binbin (#2283)
  • Fix missing response when AUTH returns an error inside a transaction by @enjoy-binbin (#2287)
  • Fix memory leak when shrinking a hashtable without entries by @yzc-yzc (#2288)
  • Fix MEMORY USAGE to consider embedded keys by @yulazariy (#2290)
  • Fix replicas claiming to still have slots after manual failover by @enjoy-binbin (#2301)
  • Prevent bad memory access when NOTOUCH client gets unblocked by @uriyage (#2347)
  • Fix large allocations crashing Valkey during active defrag by @Fusl (#2353)

Build and Tooling

  • Support for RDB analysis reports by @artikell (#1743)
  • Implement RPS control for valkey-benchmark by @artikell (#1761)
  • valkey-cli: ensure output ends with a newline if missing when printing reply by @xbasel (#1782)
  • Drop lua object files on clean by @secwall (#1812)
  • Check both arm64 and aarch64 for ARM based system architecture by @eifrah-aws (#1829)
  • Add --sequential option to valkey-benchmark to support populating entire keyspace by @SoftlyRaining (#1839)
  • Support environment variable VALKEYCLI_AUTH alongside REDISCLI_AUTH in valkey-cli by @HiranmoyChowdhury (#1995)
  • Add MGET test to valkey-benchmark by @zuiderkwast (#2015)
  • Add support to send multiple arbitrary commands to valkey-benchmark by @zuiderkwast (#2057)
  • Support RDMA for valkey-cli and benchmark by @pizhenwei (#2059)
  • Support MPTCP for valkey-cli and benchmark by @pizhenwei (#2067)
  • Allow valkey-benchmark to support multiple random (or sequential) placeholders by @SoftlyRaining (#2102)
  • Change default values of valkey-cli to use valkey naming, and added fallback to old values by @avifenesh (#2334)
  • Fix duplicate Acks for RDMA events and fix extremely large max latency for RDMA benchmark (#2430)

Behavior Change

  • Move auth check to the front, before command exist/arity/protected check by @enjoy-binbin (#1475)
  • Include command fullname in error message when returning errors in multi-execs by @enjoy-binbin (#2286)
  • Add STALE command flag to SCRIPT-EXISTS, SCRIPT-SHOW and SCRIPT-FLUSH by @enjoy-binbin (#2419)

Contributors

Don't miss a new valkey release

NewReleases is sending notifications on new releases.