Skip to content

valkey

9.1.3
valkey-io/valkey

A flexible distributed key-value database that is optimized for caching and other realtime workloads.

Version of valkey-io/valkey you run

CompareView on GitHub

Supported versions

Source: endoflife.date
LineLatestReleasedSecurity fixes
9.19.1.3May 19, 2026Until May 19, 2031
9.09.0.7Oct 21, 2025Until Oct 21, 2028
8.18.1.11Mar 31, 2025Until Mar 31, 2030
8.08.0.12Sep 15, 2024Until Sep 15, 2027
7.27.2.15Apr 16, 2024Until Apr 16, 2029

Release history

All releases on GitHub
BadgeLatest version of valkey-io/valkey[![version](/badge/valkey-io/valkey)](/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 DELEX command 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 GENPASS and 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 HRANDFIELD and SRANDMEMBER with 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-keys by @tanmayBeginsJourney (#4775)
  • Speed up the INFO command 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 ZPOPMIN and ZPOPMAX on 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 WRITE or CLUSTER FAILOVER by @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_HashHasStringRef on 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 UNLOAD runs between defrag cycles by @madolson (#5154)
  • Propagate PFADD elements 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 SYNC mode 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 __index metamethod that raises an error by @madolson (#5118)
  • Fix forkless BGSAVE producing a corrupt snapshot when SWAPDB runs without being replicated, such as from a script with replication disabled by @madolson (#5116)
  • Let FLUSHALL and SHUTDOWN cancel 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_function named 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 GEOSEARCH returning 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)
  • XACKDEL with KEEPREF now 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, and ValkeyModule_SetExpire that overflow when added to the current time, preventing server aborts from negative expires by @madolson (#4880)
  • ACL DIGEST now 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 ZRANGEBYLEX LIMIT 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 LIMIT offset now return an empty result instead of a spurious element on btree-encoded keys by @xiaocj (#4637)
  • Fix HSETEX and HGETEX failing to parse their arguments when the key is named fields by @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 LSET on 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)

Full release notesCompare with previous