Releases: valkey-io/valkey
8.0.1
Upgrade urgency SECURITY: This release includes security fixes we recommend you
apply as soon as possible.
Bug fixes
- Fix a build issue with RDMA when using additional make parameters. (#1074)
- Fix an issue where
CLUSTER SLOTSmight return the wrong tcp or tls port when called
from inside a script or from a module. (#1072) - Fix a crash when
CLUSTER SLOTSorCLUSTER SHARDSis called from inside
a script or from a module. (#1063) - Fix a build issue on systems where
<threads.h>is unavailable. (#1053) - Fix an issue with the default
sentinel.confbeing invalid. (#1040)
Packaging Improvements
- Build binary releases with systemd support. (#1107)
- Avoid .c, .d and .o files from being copied to the binary tar.gz releases. (#1106)
Security fixes
- (CVE-2024-31449) Lua library commands may lead to stack overflow and potential RCE.
- (CVE-2024-31227) Potential Denial-of-service due to malformed ACL selectors.
- (CVE-2024-31228) Potential Denial-of-service due to unbounded pattern matching.
7.2.7
Upgrade urgency SECURITY: This release includes security fixes we recommend you
apply as soon as possible.
Bug fixes
- Prevented AOF from being incorrectly disabled after loading RDB data, ensuring
proper re-enabling of AOF. (#1001) - Resolved issues in replicationSetPrimary where the primary node's IP/port
updates were not correctly handled in the cluster gossip section. (#965)
Packaging Improvements
- Build binary releases with systemd support. (#1107)
- Avoid .c, .d and .o files from being copied to the binary tar.gz releases. (#1106)
Security fixes
- (CVE-2024-31449) Lua library commands may lead to stack overflow and potential RCE.
- (CVE-2024-31227) Potential Denial-of-service due to malformed ACL selectors.
- (CVE-2024-31228) Potential Denial-of-service due to unbounded pattern matching.
8.0.0
Upgrade urgency LOW: This is the first release of Valkey 8.0, which
includes stability and performance improvements over the second release
candidate. This release is fully compatible with Redis OSS 7.2.4.
Logging and Tooling Improvements
- Added full client info to SHUTDOWN and CLUSTER FAILOVER logs for better traceability
of requests. (#875)
Bug fixes
- Resolved issues in replicationSetPrimary where the primary node's IP/port updates were
not correctly handled in the cluster gossip section. (#965) - Fixed AOF base suffix during rewrites when modifying the aof-use-rdb-preamble setting,
ensuring correct suffix caching to prevent inconsistencies. (#886) - Addressed rare crashes in async IO threads with TLS by preventing concurrent read and
write job overlap. (#1011) - Prevented AOF from being incorrectly disabled after loading RDB data, ensuring proper
re-enabling of AOF. (#1001) - Triggered a save of the cluster configuration file before shutdown to prevent
inconsistencies caused by unsaved node configuration changes. (#822) - Fixed timing issue in CLUSTER SETSLOT to ensure replicas handle migration correctly
when receiving the command before the gossip update. (#981)
Performance
- Optimized the handling of temporary set objects in SUNION and SDIFF commands, resulting
in a 41% performance improvement for SUNION and 27% for SDIFF. (#996)
Behavior Changes
- Replicas now flush old data after checking RDB file is valid during disk-based replication,
preventing partial data loss and ensuring a clean data load. (#926)
8.0.0-rc2
Upgrade urgency LOW: This is the second release candidate of Valkey 8.0, which
generally includes stability and performance improvements over the first release
candidate. This release is fully compatible with Redis OSS 7.2.4.
New Features
- Add support for setting the group on a unix domain socket. (#901)
- Experimental - RDMA: Support user keepalive command. (#916)
Logging and Tooling Improvements
- Improve logging when a cluster is unable to failover. (#780)
- Add epoch information to failover auth denied logs. (#816)
- Improve messaging when valkey-cli cluster --fix meet check failed. (#867)
- Log unexpected $ENDOFF responses in dual channel replication. (#839)
- Skip IPv6 tests when it is unsupported on TCLSH. (#910)
- Add a light weight version of DEBUG OBJECT. (#881)
- Add lfu support for DEBUG OBJECT command, added lfu_freq and
lfu_access_time_minutes fields. (#479)
Bug fixes
- Correctly expose client infomation in the slowlog when running commands in scripts. (#805)
- Fix a bug where lastbgsave_status was unecessarily being updated when dual
channel replication failed. (#811) - Fix a bug which caused dual channel replication to get stuck because of a TLS
issue. (#837) - Fix a bug which caused bouncing
-REDIRECTmessages during a FAILOVER (#871) - Avoid re-establishing replication to a node that is already the primary in
CLUSTER REPLICATE. (#884) - Fix
CLUSTER SETSLOTwithBLOCKto only wait for replicas that are online. (#879) - Fix
valkey-clito make source node ignores NOREPLICAS when doing the last CLUSTER SETSLOT (#928) - Exclude '.' and ':' from
isValidAuxChar's banned charset to better support
IPV6 addresses. (#963) - Better handle
-REDIRECTmessages in the MULTI context. (#895)
Performance
- Improve multithreaded performance with memory prefetching. (#861)
- Optimize ZUNION[STORE] command by removing unnecessary accumulator dict. (#829)
- Optimize linear search of WAIT and WAITAOF when unblocking the client. (#787)
- Move prepareClientToWrite out of loop for lrange command to remove redundant calls. (#860)
- Optimize various commands by using sdsAllocSize instead of sdsZmallocSize. (#923)
- Using intrinsics to optimize counting HyperLogLog trailing bits. (#846)
- Free client's MULTI state when it becomes dirty to reduce memory usage. (#961)
- Optimize the fast path of SET if the expiration time has already expired. (#865)
Compatibility Improvements
- Add 4 sentinel command
GET-PRIMARY-ADDR-BY-NAME,PRIMARY,PRIMARIES, and
IS-PRIMARY-DOWN-BY-ADDRto allow clients to use inclusive language. (#789)
Behavior Changes
- Block unsubscribe related commands for clients that are not in subscribed mode. (#759)
Configuration Changes
8.0.0-rc1
Upgrade urgency LOW: This is the first release candidate of Valkey 8.0, with
performance, reliability, and observability improvements. It includes asynchronous
I/O threading, better cluster scaling reliability, dual primary-replica channel
for faster full synchronization, per-slot metrics for resource management, and
experimental RDMA support for increased throughput and reduced latency. This
release is fully compatible with Redis OSS 7.2.4.
Un-deprecated Commands - Cluster
- Un-deprecate the
CLUSTER SLOTScommand. (#536)
New/Modified Commands - Core
- Add
SCRIPT SHOWsub-command to dump scripts via SHA1. (#617) - Add
NOSCORESoption toZSCANcommand. (#324) - Add
NOVALUESoption toHSCANcommand. (Redis#12765) - Expose Lua
os.clock()API to allow scripts to determine how long the
script has been executing. (Redis#12971) - Implement
CLIENT KILL MAXAGE <MAXAGE>. (Redis#12299) - Allow running
WAITAOFin scripts, removeNOSCRIPTflag. (Redis#12977) - Support
XREAD[GROUP]withBLOCKoption in scripts. (Redis#12596) - Introduce
+as a special ID for the last item in stream onXREAD
Command. (Redis#7388, Redis#13117)
New/Modified Commands - Cluster
- Introduce
CLUSTER SLOT-STATScommand which allows tracking of per slot
metrics for key count, CPU utilization, network bytes in, and network
bytes out. (#20, #351) - Add
TIMEOUToption toCLUSTER SETSLOTcommand. (#556, #445)
New/Modified Metrics - Core
- Introduce per-client metrics for network traffic and command execution
inCLIENT LISTandCLIENT INFO. (#327) - Add metrics for DB memory overhead and rehashing status to
INFO MEMORY
andMEMORY STATS. (Redis#12913) - Add
pubsub_clientsmetric toINFO CLIENTS. (Redis#12849) - Add metrics for client buffer limit disconnections to
INFO. (Redis#12476) - Add metrics for monitoring clients using
WATCHcommand and watched keys.
(Redis#12966) - Added allocator muzzy memory metrics to
INFO MEMORYandMEMORY STATS.
(Redis#12996)
New Features - Core
- Support replica redirect for read/write operations to primary in standalone
mode. (#325) - Add server config for cluster blacklist TTL. (#738)
- Add availability zone server config. (#700)
New Features - Cluster
- Support IPv4 and IPv6 dual stack and client-specific IPs in clusters. (#736)
- Support
BY/GEToptions forSORT/SORT_ROin cluster mode when pattern
implies a single slot. (Redis#12728)
Compatibility Improvements - Core
- Derive RDB and module child process names based on server start name for
compatibility. (#454) - Update server identity in
serverPanicoutput based onextended-redis-compatibility
config. (#415)
Compatibility Improvements - Sentinel
- Accept
redis-sentinelto start Valkey in sentinel mode. (#731)
Performance/Efficiency Improvements - Core
- Introduce dual channel for more efficient full sync replication. (#60)
- Introduce async IO threading for improved multi-threaded performance.
(#763, #758) - Embed key directly in main dictionary entry for improved memory efficiency.
(#541) - Use thread-local storage to reduce atomic contention in updating memory
metrics. (#674) - Reduce redundant calls to
prepareClientToWritefor continuousaddReply*.
(#670) - Optimize the logic for checking conversion to skip list during
ZADDoperations.
(#806) - Optimize
sdsfreewithzfree_with_sizeto avoid redundant size calculation.
(#453) - Combine events to eliminate redundant
kevent(2)calls. (#638) - Introduce shared query buffer for client reads to reduce memory usage. (#258)
- Optimize CRC64 performance for large batches by processing bytes in parallel.
(#350) - Use
SOCK_NONBLOCKto reduce system calls for outgoing connections. (#293) - Enable
accept4()detection on specific versions of various platforms. (#294) - Convert CRC16 slot table to fixed-size array for improved memory efficiency.
(Redis#13112) - Run
SCRIPT FLUSHtruly asynchronously and close Lua interpreter in a
background thread. (Redis#13087) - Optimize
DELcommand to avoid redundant deletions for expired keys. (Redis#13080) - Improve defragmentation for large bins to enhance memory efficiency. (Redis#12996)
- Optimize hash table resizing to include empty dictionaries. (Redis#12819)
- Reduce performance impact of dictionary rehashing by optimizing bucket processing.
(Redis#12899) - Optimize performance for simultaneous client
[P|S]UNSUBSCRIBE. (Redis#12838) - Optimize CPU cache efficiency during dictionary rehashing. (Redis#5692)
- Optimize
ZRANGEoffset location from linear search to skip list jump. (Redis#12450) - Fix
aeSetDontWaittiming to avoid unnecessary waits inaeProcessEvent. (Redis#12068)
Performance/Efficiency Improvements - Cluster
- Add lightweight cluster message header for Pub/Sub messages. (#654)
- Minor performance improvement in Valkey cluster by avoid initializing key
buffer ingetKeysResult. (#631) - Cache
CLUSTER SLOTSresponse to improve throughput and reduce latency. (#53) - Replace slots_to_channels radix tree with slot-specific dictionaries for
shard channels. (Redis#12804) - Optimize
KEYScommand when pattern includes hashtag and implies a single
slot. (Redis#12754) - Optimize
SCANcommand withMATCHwhen pattern implies a single slot.
(Redis#12536) - Replace cluster metadata with slot specific dictionaries to reduce memory
usage when using Valkey cluster. (Redis#11695, Redis#12704)
Reliability Improvements - Core
- Limit tracking custom errors (e.g. from Lua) while allowing normal errors
to be tracked (#500, Redis#13141) - Manage maximum number of new connections per cycle to prevent connection
storms. (Redis#12178)
Reliability Improvements - Cluster
- Reduce fail-over time in Valkey cluster when multiple sequential fail-overs
occurred by resettingfailover_auth_timewhen the new primary node goes
down. (#782) - Restrict node failure marking to primaries with assigned slots. (#634)
- Enhance cluster meet reliability under link failures. (#461)
- Improve reliability of slot migration in Valkey clusters. (#445)
Usability Improvements - Core
- Re-brand and refine latency report messages. (#644)
- Optimize
ACL LOADto avoid disconnecting clients whose users are unchanged.
(Redis#12171)
Usability Improvements - Cluster
- Adjust log levels for various cluster-related logs to improve clarity. (#633)
- Maintain deterministic ordering of replica(s) in
CLUSTER SLOTSresponse. (#265)
Usability Improvements - CLI
- Add prompt message when Ctrl-C is pressed in
valkey-cli. (#702) - Keep an in-memory history of all commands in
valkey-cliso that sensitive
commands can be shown within the same session. (Redis#12862)
Module Improvements - Core
- Add
ValkeyModule_TryCalloc()andValkeyModule_TryRealloc()to handle
allocation failures gracefully. (Redis#12985) - Make
ValkeyModule_Yieldthread-safe by handling events in the main thread.
(Redis#12905) - Allow modules to declare new ACL categories. (Redis#12486)
Module Improvements - Cluster
- Add API
ValkeyModule_ClusterKeySlotandValkeyModule_ClusterCanonicalKeyNameInSlot.
(Redis#13069)
Behavior Changes - Core
- Re-brand the Lua debugger. (#603)
- Change default pidfile from
redis.pidtovalkey.pid. (#378) - Abort transactions on nested
MULTIorWATCHcommands. (#723) - Ensure keys that match the
SCANfilter are not lazily expired and return
an error for invalid types. (#501) - Rename
redisin AOF logs and proc title tovalkey-aof-rewrite. (#393) - Change default syslog-ident from
redistovalkey. (#390) - Update
RedistoValkeyinserverLogmessages in server.c file. (#231) - Remove
Redisfrom various error reply messages. See GitHub PR for more
details. (#206) - Reject empty strings for configs
dir,dbfilename, andcluster-config-file.
(#636) - Change key-spec flag from
RWtoOWforSINTERSTOREcommand. (Redis#12917) - Return more precise error messages for some cases verifying keys during script
execution. (Redis#12707) - Return errors for
BITCOUNTandBITPOSwith non-existing keys or invalid
arguments instead of zero. (Redis#11734) - Validate
BITCOUNTarguments before key existence check. (Redis#12394) - Redact ACL username information and mark
*-key-file-passconfigs as
sensitive. (Redis#12860) - Allow
MULTI/EXECto use a small amount of additional memory beyond the
used-memory limit. (Redis#12961)
Behavior Changes - Cluster
- Allow
CLUSTER NODES/INFO/MYID/MYSHARDIDduring loading state. (#596) - Make cluster replicas return
ASKandTRYAGAINduring slot migration. (#495)
Behavior Changes - Sentinel
- Replace
master-reboot-down-after-periodwithprimary-reboot-down-after-period
insentinel.conf. (#647)
Bug Fixes - Core
- Fix a bug that caused LRU/LFU inconsistencies for some integer objects. (#250)
- Fix a bug where Valkey may use a sub-optimal encoding for some data types.
(Redis#13148) - Fix propagation of
entries_readby callingstreamPropagateGroupID
unconditionally. (Redis#12898) - Fix race condition issues between ...
7.2.6
Upgrade urgency MODERATE: This release fixes an incompatibility issue with modules
compiled for Redis. For other users, it primarily fixes uncommon bugs.
Bug Fixes - Core
- Fix typo in REGISTER_API macro to prevent segfaults when loading Redis
modules (#608) - Fix the command duration reset issue when clients are blocked and commands
are reprocessed (#526) - Fix the data type conversion error in zrangeResultBeginStore (Redis#13148)
- Fix a crash caused by quicklist node merges (Redis#13040)
- Fix crashes in module blocking client timeout cases (Redis#13011)
- Fix conversion of numbers in Lua args to Redis args
(Redis#13115, Fixes Redis#13113) - Fix crash in LSET command when replacing small list items with larger ones,
creating listpacks larger than 4GB (Redis#12955, Fixes Redis#12864) - Fix blocking command timeout reset issue during reprocessing (Redis#13004)
Bug Fixes - Cluster
- Fix the CLUSTER SHARDS command to display accurate slot information even
if a primary node fails (#790, Fixes #784) - Fix an issue where module authentication failed when the cluster was down
(#693, Fixes #619) - Ensure only primary nodes with slots can mark another node as failed (#634)
- Improve MEET command reliability under link failures to maintain cluster
membership symmetry (#461) - Allow single primary node to mark potentially failed replica as FAIL in
single-shard cluster (Redis#12824)
Bug Fixes - Sentinel
Bug Fixes - CLI
- Ensure the
--countoption in redis-cli works correctly even without
--pattern(Redis#13092) - Fix redis-check-aof misidentifying data in manifest format as MP-AOF
(Redis#12951) - Update redis-check-rdb types to replace stream-v2 with stream-v3
(Redis#12969)
7.2.5
7.2.5-rc1
Upgrade urgency LOW: Second release candidate for Valkey with API compatibility
for OSS Redis 7.2.4. Moving to a release candidate on 7.2.5, to make it clearer
this is a patch iteration as opposed to an exact copy of OSS Redis. Also includes
fixes to minor bugs present in 7.2.4 RC1 and more compatibility changes.
Changes to support Valkey branding
- Update README to remove Redis references.
- Update valkey-server and valkey-cli help info to show only Valkey (#222)
- Add compatibility for lua debugger to use 'server' instead of redis. (#303)
Bug fixes
7.2.4-rc1
Upgrade urgency LOW: Initial release of Valkey with API compatibility for OSS
Redis 7.2.4. This release is based off of OSS Redis 7.2.4, with additional
functionality to better brand the server as Valkey instead of Redis. All APIs
are fully backwards compatible and care was taken to minimize the number of
log lines that were changed to best support existing tooling around log parsing.
Changes to support Valkey branding
- Rename the 6 Redis binaries to ones with
valkeyprefixes:valkey-server,
valkey-cli,valkey-benchmark,valkey-check-aof,valkey-check-rdband
valkey-sentinel. (#62) - During install, create symlinks mapping the corresponding Redis binary names
to the new Valkey binaries. (#193) - INFO fields: Introduce
valkey_versionandserver_namefields. The
redis_versionwill continue to be present and will indicate the Redis OSS
version that the server is compatible with. (#47, #232) - RDB file format: Introduce a
valkey-verRDB field to indicate an RDB file
was produced by a Valkey server. This field is ignored when the file is
loaded by Redis OSS. (#47) - Module API changes: Introduce Valkey Module API in a new file, valkeymodule.h,
with functions and types prefixed by ValkeyModule. Valkey is still fully ABI
compatible with the Redis Module API, meaning Valkey supports running modules
compiled with either the Redis or Valkey Module APIs. For full source
compatibility, the Redis Module API (redismodule.h) is also kept with the
RedisModule prefixed functions and types. (#194, #243, #262) - Scripting: Introduce a new top level
serverobject for functions and scripts
that can be instead of the existingredisobject. This allows users to
replace calls likeredis.call(...)withserver.call(...). (#213) - Makefile: Introduce
SERVER_CFLAGSandSERVER_LDFLAGSas an alternative to
REDIS_CFLAGSandREDIS_LDFLAGS. (#46) - Update template config files to replace references to Redis with Valkey. The
file valkey.conf replaces redis.conf. (#29, #171) - Logging: Update startup, shutdown, and help logs to reference Valkey instead of
Redis. Valkey server will also show the Valkey logo at startup and show the
Valkey repositories when crashing. (#251, #252, #263, #113)
Bug fixes
- Cluster: Fix an issue where cluster nodes running on Redis versions earlier
than 7.0 would be unable to communicate with nodes running on Valkey 7.2. This
change also introduces a slight delay when hostnames are not displayed when a
node is first added to the cluster. (#52)
A special thank you for the amount of work put into this release by:
- Viktor Söderqvist
- Madelyn Olson
- Wen Hui
- Ping Xie
- Parth Patel
- Roshan Katri
- Zhu Binbin
- Zhao Zhao
- Bany
- Harkrishn Patro
- Vitah Lin
- Ziyang Zeng (For creating the logo!)
- The many other community members who provided their support!