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
- Client Commands Extended Filtering by @sarthakaggarwal97 (#1466)
- Add multi-database support to cluster mode by @xbasel (#1671)
- Support BYPOLYGON option for GEOSEARCH by @KarthikSubbarao (#1809)
- Introduce MPTCP by @pizhenwei (#1811)
- Add sentinel_total_tilt to sentinel INFO sentinel by @carlosfu (#1904)
- Add support for automatic client authentication via TLS certificate fields by @omanges (#1920)
- Add --hotkeys-count option for valkey-cli by @hwware (#1933)
- Introduce atomic slot migration by @murphyjacob4 (#1949)
- Introduce MPTCP for replica by @pizhenwei (#1961)
- Add DELIFEQ command by @LinusU (#1975)
- Allow dynamic modification of io-threads num by @ayush933 (#2033)
- Introduce HASH items expiration by @ranshid (#2089)
- Add SAFE option to SHUTDOWN to reject shutdown in unsafe situations by @enjoy-binbin (#2195)
- Support negative filtering for client command filters by @soloestoy (#2378)
New Configs
- Auto-failover on shutdown unified config by @zuiderkwast (#2292)
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
- Ran Shidlansik @ranshid
- Binbin @enjoy-binbin
- Jacob Murphy @murphyjacob4
- Madelyn Olson @madolson
- YueTang-Vanessa @YueTang-Vanessa
- cxljs @cxljs
- Sarthak Aggarwal @sarthakaggarwal97
- amanosme @amanosme
- Hanxi Zhang @hanxizh9910
- Seungmin Lee @sungming2
- uriyage @uriyage
- Katie Holly @Fusl
- Nicky-2000 @Nicky-2000
- Allen Samuels @allenss-amazon
- yzc-yzc @yzc-yzc
- zhaozhao.zz @soloestoy
- asagegeLiu @asagege
- nitaicaro @nitaicaro
- Matthew @utdrmac
- Omkar Mestry @omanges
- Viktor Söderqvist @zuiderkwast
- kukey @kukey
- Harkrishn Patro @hpatro
- Avi Fenesh @avifenesh
- Amit Nagler @naglera
- Josh Soref @jsoref
- youngmore1024 @youngmore1024
- Rain Valentine @SoftlyRaining
- skyfirelee @artikell
- Wen Hui @hwware
- yulazariy @yulazariy
- Yakov Gusakov @gusakovy
- charsyam @charsyam
- Simon Baatz @gmbnomis
- Thalia Archibald @thaliaarchi
- chzhoo @chzhoo
- xbasel @xbasel
- Stav Ben-Tov @stav-bentov
- wuranxx @wuranxx
- Ayush Sharma @ayush933
- chx9 @chx9
- KarthikSubbarao @KarthikSubbarao
- Hüseyin Açacak @huseyinacacak-janea
- アンドリー・アンドリ @odaysec
- Ping Xie @PingXie
- Lipeng Zhu @zhulipeng
- Linus Unnebäck @LinusU
- Vitah Lin @vitahlin
- kronwerk @kronwerk
- Vadym Khoptynets @poiuj
- muelstefamzn @muelstefamzn
- zhenwei pi @pizhenwei
- George Padron @DoozkuV
- Björn Svensson @bjosv
- aradz44 @aradz44
- Hiranmoy Das Chowdhury @HiranmoyChowdhury
- Yair Gottdenker @yairgott
- Roshan Khatri @roshkhatri
- nesty92 @nesty92
- carlosfu @carlosfu
- Arthur Lee @arthurkiller
- Shai Zarka @zarkash-aws
- Sergey Kolosov @skolosov-snap
- Nathan Scott @natoscott
- lucasyonge @lucasyonge
- WelongZuo @WelongZuo
- Jim Brunner @JimB123
- jeon1226 @jeon1226
- Benson-li @li-benson
- Meinhard Zhou @MeinhardZhou
- Nikhil Manglore @Nikhil-Manglore
- Bogdan Petre @bogdanp05
- eifrah-aws @eifrah-aws
- Ricardo Dias @rjd15372
- secwall @secwall
- Anastasia Alexandrova @nastena1606
- Marek Zoremba @zori-janea
- VoletiRam @VoletiRam