valkey
9.1.3A flexible distributed key-value database that is optimized for caching and other realtime workloads.
- Maintenance
- Active434 commits in 3 months · bus factor 1
- License
- BSD-3-ClausePermissive · OSI-approved
- Security
- 13 advisories10 high, 3 medium · Scorecard 6.1/10
- Supported versions
- 5 lines supportednewest 9.1 · oldest 7.2 until Apr 16, 2029
27.7k stars · 1.5k forks · 1k open issues · last release 19 days ago · data checked 5 hours ago
Supported versions
Source: endoflife.date| Line | Latest | Released | Security fixes |
|---|---|---|---|
| 9.1 | 9.1.3 | May 19, 2026 | Until May 19, 2031 |
| 9.0 | 9.0.7 | Oct 21, 2025 | Until Oct 21, 2028 |
| 8.1 | 8.1.11 | Mar 31, 2025 | Until Mar 31, 2030 |
| 8.0 | 8.0.12 | Sep 15, 2024 | Until Sep 15, 2027 |
| 7.2 | 7.2.15 | Apr 16, 2024 | Until Apr 16, 2029 |
Release history
All releases on GitHubAtom feed/feed/valkey-io/valkey
Badge
[](/p/valkey-io/valkey)
Valkey 9.2.0-rc2 - Released Wed 04 November 2026
--------------------------------------------------
Upgrade urgency LOW: This is the second release candidate of Valkey 9.2.0.
New Features and Enhanced Behavior
- Add new
DELEXcommand to conditionally delete a string key when its value matches (IFEQ) or differs from (IFNE) a given value by @lightsigma96 (#4607) - Add Zstd as a streaming compression codec for RDB persistence and replication, offering better compression ratios than LZ4 by @sarthakaggarwal97 (#3798)
- Support streaming-compressed RDB preambles in AOF bases, so compressed full-sync RDB files can be reused directly as AOF bases by @sarthakaggarwal97 (#4754)
ACL GENPASSand the hash function seed draw randomness from the configured OpenSSL 3 provider when built with TLS, supporting deployments that require a validated crypto module by @MarkAtwood (#4339)- Support forkless full synchronization to replicas, serving disk and diskless full syncs from a background-thread snapshot without forking by @nitaicaro (#4797)
Performance and Efficiency Improvements
- Speed up sorted set score updates in listpack encoding by replacing the score in place when the member keeps its position by @charsyam (#3491)
- Fix quadratic slowdown in
HRANDFIELDandSRANDMEMBERwith counts on collections whose elements differ only in letter case by @madolson (#5167) - Bound the time spent per cycle evicting keys from the client tracking table, avoiding long stalls after lowering
tracking-table-max-keysby @tanmayBeginsJourney (#4775) - Speed up the
INFOcommand by around 5% by pre-allocating the output buffer by @charsyam (#3413) - Reclaim client-side caching tracking table entries left by disconnected clients, fixing a memory leak under read-heavy workloads, and include the tracking table in active defrag by @rayjinghaolei (#4190)
- Speed up
ZPOPMINandZPOPMAXon B+tree encoded sorted sets by detaching edge items without a key search or copy by @charsyam (#4852) - Counting a hash's fields with expirations is now O(1) for hashtable-encoded hashes by tracking the volatile set size on each mutation by @frostzt (#4829)
- Speed up AOF command propagation by serializing commands directly into the AOF buffer, removing an allocation and copy per command by @charsyam (#3496)
- Cache the earliest event-loop timer to avoid an O(N) scan per iteration, reducing overhead with many timers such as RDMA connections by @royenheart (#4354)
- Speed up HGETALL, HKEYS and HVALS with exact-length reply headers, fused bulk replies, and entry prefetching by @jjuleslasarte (#4417)
- Eliminate false sharing in per-thread memory usage counters, improving throughput with I/O threads on SMT x86 systems by @omerrubi-amzn (#4107)
- Read-only list iteration (e.g. LRANGE, LPOS) no longer decompresses and recompresses quicklist nodes in place, cutting CPU cost on compressed lists by @murphyjacob4 (#4782)
- Speed up ZSCAN on btree-encoded sorted sets by avoiding temporary member and score copies and prefetching items by @charsyam (#4856)
- Reduce cache-line false sharing on IO thread activity and job counters for better multi-threaded IO performance by @omerrubi-amzn (#4976)
- PHDELPREFIX now bounds its temporary path copies to 64KiB per batch, avoiding large untracked memory spikes on long shared prefixes by @madolson (#5179)
Bug Fixes
- Reject module write commands while the server is paused for writes, preventing a crash from module timer callbacks during
CLIENT PAUSE WRITEorCLUSTER FAILOVERby @smkher (#3645) - Fix event loop busy-spinning on virtual machines by not using raw TSC for the monotonic clock when the kernel clocksource is not tsc by @quanyeyang (#4707)
- Fix a crash in
ValkeyModule_HashHasStringRefon a missing or expired field and correct wrong return values in the hash stringRef module APIs by @ShubhamTaple (#4504) - Fix a server abort on a RESTORE payload declaring a string length that overflows the allocation size; such payloads are now rejected as bad data by @enjoy-binbin (#4733)
- Fix ZINTER/ZINTERSTORE returning input-order-dependent scores when a weighted term is 0*inf; a NaN weighted score now counts as 0, matching ZUNION by @leomurillo (#4997)
- Fix crashes, lookup hangs, and duplicate set members when keys or elements reach 2 GiB, caused by storing string lengths in a 32-bit integer by @madolson (#5133)
- Fix module global defrag resuming on the wrong module or with a stale cursor when
MODULE UNLOADruns between defrag cycles by @madolson (#5154) - Propagate
PFADDelements applied before a corrupted-HLL INVALIDOBJ error so replicas and the AOF stay consistent with the primary by @madolson (#5128) - Fix a server crash in
SCRIPT DEBUG SYNCmode when a debugger command arrives split across more than one read by @madolson (#5127) - Fix a server panic when a Lua script returns or raises an error table whose metatable has an
__indexmetamethod that raises an error by @madolson (#5118) - Fix forkless BGSAVE producing a corrupt snapshot when
SWAPDBruns without being replicated, such as from a script with replication disabled by @madolson (#5116) - Let
FLUSHALLandSHUTDOWNcancel a forkless save that is finalizing its file, so a stale snapshot can no longer overwrite the newer dump.rdb by @madolson (#5121) - Fix a server crash when a module never sets a postponed reply length; the leftover placeholder is now filled with an empty array by @madolson (#5159)
- Fix a memory leak when
server.register_functionnamed arguments are repeated in a different letter case by @madolson (#5120) - Preserve expired but not yet reaped hash fields across listpack-to-hashtable conversion so their deletion is properly reaped and propagated by @frostzt (#4704)
- Fix a double-decremented item count when background iteration is terminated with a SWAPDB or FLUSHDB event queued by @JimB123 (#4750)
- Fix
GEOSEARCHreturning empty results for exact zero-distance matches on builds where floating-point contraction breaks the latitude distance calculation by @Baraa-Hasheesh (#4777) - Reject inline commands containing a raw NUL byte with a protocol error instead of leaving the connection stalled by @cjx-zar (#4759)
- Fix a memory leak on normal shutdown caused by I/O worker threads not being terminated and cleaned up by @roshkhatri (#4710)
XACKDELwithKEEPREFnow replies 1 instead of -1 when acknowledging an entry whose stream message was already deleted, matching the ACKED and DELREF modes by @adityamukesh (#4843)- Fix listpack encoding incompatibility that caused RDB load and replication failures for entries of certain lengths between 9.0 and 9.1.x by @jjuleslasarte (#4819)
- Reject relative expire times in
SET/GETEX,RESTORE, andValkeyModule_SetExpirethat overflow when added to the current time, preventing server aborts from negative expires by @madolson (#4880) ACL DIGESTnow includes role definitions, so editing a role's rules changes the reported fingerprint by @melancholictheory (#4694)- Fix a server crash when loading an ACL file containing a selector with an unmatched parenthesis by @magic-peach (#4214)
- Fix a segfault on Alpine/musl when Lua is built as a module, caused by a symbol clash on an internal clock function by @mohammedgqudah (#4270)
- Fix lex range seeks, NaN score bound handling, and a memory leak in B+tree sorted sets, and resolve
ZRANGEBYLEXLIMIT offsets in logarithmic time by @xiaocj (#4644) - Fix expired hash fields left untracked after listpack-to-hashtable conversion, which could crash the server on a later write and leave fields that are never reaped by @beyondwin (#4894)
- Restore acceptance of hexadecimal float sorted set scores (such as
0x10), keeping replication and AOF replay compatible with Valkey 9.0 by @quanyeyang (#4875) - Sorted set range commands with a negative
LIMIToffset now return an empty result instead of a spurious element on btree-encoded keys by @xiaocj (#4637) - Fix
HSETEXandHGETEXfailing to parse their arguments when the key is namedfieldsby @sebxt (#4945) - Fix a crash when active defrag's deferred keys outlive a keyspace replacement such as FLUSHDB/FLUSHALL ASYNC, SWAPDB, or a replica's pre-sync flush by @taham0 (#4968)
- Fix
LSETon 64-bit builds silently modifying the wrong element for out-of-range indexes instead of returning an index out of range error by @charsyam (#4823) - Fix a heap buffer overflow in cluster Pub/Sub message construction; oversized PUBLISH and SPUBLISH payloads are now rejected with an error in cluster mode by @roshkhatri (#5030)
- Lex range commands on btree-encoded sorted sets with mixed scores now match listpack results, preventing primary/replica divergence via ZREMRANGEBYLEX and ZRANGESTORE by @pirate329 (#4954)