|
1 |
| -Hello! This file is just a placeholder, since this is the "unstable" branch |
2 |
| -of Valkey, the place where all the development happens. |
| 1 | +Valkey 8.0 release notes |
| 2 | +======================== |
| 3 | +-------------------------------------------------------------------------------- |
| 4 | +Upgrade urgency levels: |
| 5 | +LOW: No need to upgrade unless there are new features you want to use. |
| 6 | +MODERATE: Program an upgrade of the server, but it's not urgent. |
| 7 | +HIGH: There is a critical bug that may affect a subset of users. Upgrade! |
| 8 | +CRITICAL: There is a critical bug affecting MOST USERS. Upgrade ASAP. |
| 9 | +SECURITY: There are security fixes in the release. |
| 10 | +-------------------------------------------------------------------------------- |
3 | 11 |
|
4 |
| -There is no release notes for this branch, it gets forked into another branch |
5 |
| -every time there is a partial feature freeze in order to eventually create |
6 |
| -a new stable release. |
| 12 | +================================================================================ |
| 13 | +Valkey 8.0.0 RC1 - Released Thu 1 Aug 2024 |
| 14 | +================================================================================ |
| 15 | +Upgrade urgency LOW: This is the first release candidate of Valkey 8.0, with |
| 16 | +performance, reliability, and observability improvements. It includes asynchronous |
| 17 | +I/O threading, better cluster scaling reliability, dual primary-replica channel |
| 18 | +for faster full synchronization, per-slot metrics for resource management, and |
| 19 | +experimental RDMA support for increased throughput and reduced latency. This |
| 20 | +release is fully compatible with Redis OSS 7.2.4. |
7 | 21 |
|
8 |
| -Usually "unstable" is stable enough for you to use it in development environments |
9 |
| -however you should never use it in production environments. It is possible |
10 |
| -to download the latest stable release here: |
| 22 | +Un-deprecated Commands - Cluster |
| 23 | +================================ |
| 24 | +* Un-deprecate the `CLUSTER SLOTS` command. (#536) |
11 | 25 |
|
12 |
| - https://valkey.io/download/ |
| 26 | +New/Modified Commands - Core |
| 27 | +============================ |
| 28 | +* Add `SCRIPT SHOW` sub-command to dump scripts via SHA1. (#617) |
| 29 | +* Add `NOSCORES` option to `ZSCAN` command. (#324) |
| 30 | +* Add `NOVALUES` option to `HSCAN` command. (Redis#12765) |
| 31 | +* Expose Lua `os.clock()` API to allow scripts to determine how long the |
| 32 | + script has been executing. (Redis#12971) |
| 33 | +* Implement `CLIENT KILL MAXAGE <MAXAGE>`. (Redis#12299) |
| 34 | +* Allow running `WAITAOF` in scripts, remove `NOSCRIPT` flag. (Redis#12977) |
| 35 | +* Support `XREAD[GROUP]` with `BLOCK` option in scripts. (Redis#12596) |
| 36 | +* Introduce `+` as a special ID for the last item in stream on `XREAD` |
| 37 | + Command. (Redis#7388, Redis#13117) |
13 | 38 |
|
14 |
| -More information is available at https://valkey.io |
| 39 | +New/Modified Commands - Cluster |
| 40 | +=============================== |
| 41 | +* Introduce `CLUSTER SLOT-STATS` command which allows tracking of per slot |
| 42 | + metrics for key count, CPU utilization, network bytes in, and network |
| 43 | + bytes out. (#20, #351) |
| 44 | +* Add `TIMEOUT` option to `CLUSTER SETSLOT` command. (#556, #445) |
15 | 45 |
|
16 |
| -Happy hacking! |
| 46 | +New/Modified Metrics - Core |
| 47 | +=========================== |
| 48 | +* Introduce per-client metrics for network traffic and command execution |
| 49 | + in `CLIENT LIST` and `CLIENT INFO`. (#327) |
| 50 | +* Add metrics for DB memory overhead and rehashing status to `INFO MEMORY` |
| 51 | + and `MEMORY STATS`. (Redis#12913) |
| 52 | +* Add `pubsub_clients` metric to `INFO CLIENTS`. (Redis#12849) |
| 53 | +* Add metrics for client buffer limit disconnections to `INFO`. (Redis#12476) |
| 54 | +* Add metrics for monitoring clients using `WATCH` command and watched keys. |
| 55 | + (Redis#12966) |
| 56 | +* Added allocator muzzy memory metrics to `INFO MEMORY` and `MEMORY STATS`. |
| 57 | + (Redis#12996) |
| 58 | + |
| 59 | +New Features - Core |
| 60 | +=================== |
| 61 | +* Support replica redirect for read/write operations to primary in standalone |
| 62 | + mode. (#325) |
| 63 | +* Add server config for cluster blacklist TTL. (#738) |
| 64 | +* Add availability zone server config. (#700) |
| 65 | + |
| 66 | +New Features - Cluster |
| 67 | +====================== |
| 68 | +* Support IPv4 and IPv6 dual stack and client-specific IPs in clusters. (#736) |
| 69 | +* Support `BY/GET` options for `SORT/SORT_RO` in cluster mode when pattern |
| 70 | + implies a single slot. (Redis#12728) |
| 71 | + |
| 72 | +Compatibility Improvements - Core |
| 73 | +================================= |
| 74 | +* Derive RDB and module child process names based on server start name for |
| 75 | + compatibility. (#454) |
| 76 | +* Update server identity in `serverPanic` output based on `extended-redis-compatibility` |
| 77 | + config. (#415) |
| 78 | + |
| 79 | +Compatibility Improvements - Sentinel |
| 80 | +===================================== |
| 81 | +* Accept `redis-sentinel` to start Valkey in sentinel mode. (#731) |
| 82 | + |
| 83 | +Performance/Efficiency Improvements - Core |
| 84 | +========================================== |
| 85 | +* Introduce dual channel for more efficient full sync replication. (#60) |
| 86 | +* Introduce async IO threading for improved multi-threaded performance. |
| 87 | + (#763, #758) |
| 88 | +* Embed key directly in main dictionary entry for improved memory efficiency. |
| 89 | + (#541) |
| 90 | +* Use thread-local storage to reduce atomic contention in updating memory |
| 91 | + metrics. (#674) |
| 92 | +* Reduce redundant calls to `prepareClientToWrite` for continuous `addReply*`. |
| 93 | + (#670) |
| 94 | +* Optimize the logic for checking conversion to skip list during `ZADD` operations. |
| 95 | + (#806) |
| 96 | +* Optimize `sdsfree` with `zfree_with_size` to avoid redundant size calculation. |
| 97 | + (#453) |
| 98 | +* Combine events to eliminate redundant `kevent(2)` calls. (#638) |
| 99 | +* Introduce shared query buffer for client reads to reduce memory usage. (#258) |
| 100 | +* Optimize CRC64 performance for large batches by processing bytes in parallel. |
| 101 | + (#350) |
| 102 | +* Use `SOCK_NONBLOCK` to reduce system calls for outgoing connections. (#293) |
| 103 | +* Enable `accept4()` detection on specific versions of various platforms. (#294) |
| 104 | +* Convert CRC16 slot table to fixed-size array for improved memory efficiency. |
| 105 | + (Redis#13112) |
| 106 | +* Run `SCRIPT FLUSH` truly asynchronously and close Lua interpreter in a |
| 107 | + background thread. (Redis#13087) |
| 108 | +* Optimize `DEL` command to avoid redundant deletions for expired keys. (Redis#13080) |
| 109 | +* Improve defragmentation for large bins to enhance memory efficiency. (Redis#12996) |
| 110 | +* Optimize hash table resizing to include empty dictionaries. (Redis#12819) |
| 111 | +* Reduce performance impact of dictionary rehashing by optimizing bucket processing. |
| 112 | + (Redis#12899) |
| 113 | +* Optimize performance for simultaneous client `[P|S]UNSUBSCRIBE`. (Redis#12838) |
| 114 | +* Optimize CPU cache efficiency during dictionary rehashing. (Redis#5692) |
| 115 | +* Optimize `ZRANGE` offset location from linear search to skip list jump. (Redis#12450) |
| 116 | +* Fix `aeSetDontWait` timing to avoid unnecessary waits in `aeProcessEvent`. (Redis#12068) |
| 117 | + |
| 118 | +Performance/Efficiency Improvements - Cluster |
| 119 | +============================================= |
| 120 | +* Add lightweight cluster message header for Pub/Sub messages. (#654) |
| 121 | +* Minor performance improvement in Valkey cluster by avoid initializing key |
| 122 | + buffer in `getKeysResult`. (#631) |
| 123 | +* Cache `CLUSTER SLOTS` response to improve throughput and reduce latency. (#53) |
| 124 | +* Replace slots_to_channels radix tree with slot-specific dictionaries for |
| 125 | + shard channels. (Redis#12804) |
| 126 | +* Optimize `KEYS` command when pattern includes hashtag and implies a single |
| 127 | + slot. (Redis#12754) |
| 128 | +* Optimize `SCAN` command with `MATCH` when pattern implies a single slot. |
| 129 | + (Redis#12536) |
| 130 | +* Replace cluster metadata with slot specific dictionaries to reduce memory |
| 131 | + usage when using Valkey cluster. (Redis#11695, Redis#12704) |
| 132 | + |
| 133 | +Reliability Improvements - Core |
| 134 | +=============================== |
| 135 | +* Limit tracking custom errors (e.g. from Lua) while allowing normal errors |
| 136 | + to be tracked (#500, Redis#13141) |
| 137 | +* Manage maximum number of new connections per cycle to prevent connection |
| 138 | + storms. (Redis#12178) |
| 139 | + |
| 140 | +Reliability Improvements - Cluster |
| 141 | +================================== |
| 142 | +* Reduce fail-over time in Valkey cluster when multiple sequential fail-overs |
| 143 | + occurred by resetting `failover_auth_time` when the new primary node goes |
| 144 | + down. (#782) |
| 145 | +* Restrict node failure marking to primaries with assigned slots. (#634) |
| 146 | +* Enhance cluster meet reliability under link failures. (#461) |
| 147 | +* Improve reliability of slot migration in Valkey clusters. (#445) |
| 148 | + |
| 149 | +Usability Improvements - Core |
| 150 | +============================= |
| 151 | +* Re-brand and refine latency report messages. (#644) |
| 152 | +* Optimize `ACL LOAD` to avoid disconnecting clients whose users are unchanged. |
| 153 | + (Redis#12171) |
| 154 | + |
| 155 | +Usability Improvements - Cluster |
| 156 | +================================ |
| 157 | +* Adjust log levels for various cluster-related logs to improve clarity. (#633) |
| 158 | +* Maintain deterministic ordering of replica(s) in `CLUSTER SLOTS` response. (#265) |
| 159 | + |
| 160 | +Usability Improvements - CLI |
| 161 | +================================ |
| 162 | +* Add prompt message when Ctrl-C is pressed in `valkey-cli`. (#702) |
| 163 | +* Keep an in-memory history of all commands in `valkey-cli` so that sensitive |
| 164 | + commands can be shown within the same session. (Redis#12862) |
| 165 | + |
| 166 | +Module Improvements - Core |
| 167 | +========================== |
| 168 | +* Add `ValkeyModule_TryCalloc()` and `ValkeyModule_TryRealloc()` to handle |
| 169 | + allocation failures gracefully. (Redis#12985) |
| 170 | +* Make `ValkeyModule_Yield` thread-safe by handling events in the main thread. |
| 171 | + (Redis#12905) |
| 172 | +* Allow modules to declare new ACL categories. (Redis#12486) |
| 173 | + |
| 174 | +Module Improvements - Cluster |
| 175 | +============================= |
| 176 | +* Add API `ValkeyModule_ClusterKeySlot` and `ValkeyModule_ClusterCanonicalKeyNameInSlot`. |
| 177 | + (Redis#13069) |
| 178 | + |
| 179 | +Behavior Changes - Core |
| 180 | +======================= |
| 181 | +* Re-brand the Lua debugger. (#603) |
| 182 | +* Change default pidfile from `redis.pid` to `valkey.pid`. (#378) |
| 183 | +* Abort transactions on nested `MULTI` or `WATCH` commands. (#723) |
| 184 | +* Ensure keys that match the `SCAN` filter are not lazily expired and return |
| 185 | + an error for invalid types. (#501) |
| 186 | +* Rename `redis` in AOF logs and proc title to `valkey-aof-rewrite`. (#393) |
| 187 | +* Change default syslog-ident from `redis` to `valkey`. (#390) |
| 188 | +* Update `Redis` to `Valkey` in `serverLog` messages in server.c file. (#231) |
| 189 | +* Remove `Redis` from various error reply messages. See GitHub PR for more |
| 190 | + details. (#206) |
| 191 | +* Reject empty strings for configs `dir`, `dbfilename`, and `cluster-config-file`. |
| 192 | + (#636) |
| 193 | +* Change key-spec flag from `RW` to `OW` for `SINTERSTORE` command. (Redis#12917) |
| 194 | +* Return more precise error messages for some cases verifying keys during script |
| 195 | + execution. (Redis#12707) |
| 196 | +* Return errors for `BITCOUNT` and `BITPOS` with non-existing keys or invalid |
| 197 | + arguments instead of zero. (Redis#11734) |
| 198 | +* Validate `BITCOUNT` arguments before key existence check. (Redis#12394) |
| 199 | +* Redact ACL username information and mark `*-key-file-pass` configs as |
| 200 | + sensitive. (Redis#12860) |
| 201 | +* Allow `MULTI/EXEC` to use a small amount of additional memory beyond the |
| 202 | + used-memory limit. (Redis#12961) |
| 203 | + |
| 204 | +Behavior Changes - Cluster |
| 205 | +========================== |
| 206 | +* Allow `CLUSTER NODES/INFO/MYID/MYSHARDID` during loading state. (#596) |
| 207 | +* Make cluster replicas return `ASK` and `TRYAGAIN` during slot migration. (#495) |
| 208 | + |
| 209 | +Behavior Changes - Sentinel |
| 210 | +=========================== |
| 211 | +* Replace `master-reboot-down-after-period` with `primary-reboot-down-after-period` |
| 212 | + in `sentinel.conf`. (#647) |
| 213 | + |
| 214 | +Bug Fixes - Core |
| 215 | +================ |
| 216 | +* Fix a bug that caused LRU/LFU inconsistencies for some integer objects. (#250) |
| 217 | +* Fix a bug where Valkey may use a sub-optimal encoding for some data types. |
| 218 | + (Redis#13148) |
| 219 | +* Fix propagation of `entries_read` by calling `streamPropagateGroupID` |
| 220 | + unconditionally. (Redis#12898) |
| 221 | +* Fix race condition issues between the main thread and module threads. |
| 222 | + (Redis#12817) |
| 223 | +* Wake blocked clients ASAP in next `beforeSleep` for `WAITAOF`. (Redis#12627) |
| 224 | +* Fix crash in crash-report and improve thread management with RW locks. |
| 225 | + (Redis#12623) |
| 226 | + |
| 227 | +Bug Fixes - Cluster |
| 228 | +=================== |
| 229 | +* Fix a bug where a shard returns the incorrect slot slot information in |
| 230 | + `CLUSTER SHARDS` command on primary failure. (#790) |
| 231 | +* Allow module authentication to succeed when the cluster is down. (#693) |
| 232 | +* Fix `PONG` message processing for primary-ship tracking during fail-overs. |
| 233 | + (Redis#13055) |
| 234 | +* Prevent double freeing of cluster link with `DEBUG CLUSTERLINK KILL`. |
| 235 | + (Redis#12930) |
| 236 | +* Unsubscribe all clients from replica for shard channel if the primary |
| 237 | + ownership changes. (Redis#12577) |
| 238 | + |
| 239 | +Bug Fixes - Tooling |
| 240 | +=============== |
| 241 | +* Fix `valkey-check-aof` misidentifying data in manifest format as MP-AOF. |
| 242 | + (Redis#12958) |
| 243 | +* Fix `valkey-cli` to respect the `--count` option without requiring |
| 244 | + `--pattern`. (Redis#13092) |
| 245 | +* Fix `valkey-benchmark` to distribute operations across all slots owned by |
| 246 | + a node in cluster mode. (Redis#12986) |
| 247 | + |
| 248 | +Internal Codebase Improvements |
| 249 | +============================== |
| 250 | +* Enable debug asserts for cluster and sentinel tests. (#588) |
| 251 | +* Introduce a minimal debugger for Tcl integration test suite. (#683) |
| 252 | +* Set up clang-format GitHub action for automated code formatting checks. (#538) |
| 253 | +* Replace custom atomic logic with C11 _Atomics. (#490) |
| 254 | +* Add fast fail option for Tcl test cases. (#482) |
| 255 | +* Introduce a simple unit test framework. (#460) |
| 256 | +* An initial simple unit test framework. (#344) |
| 257 | +* Introduce Codecov for automated code coverage tracking. (#316) |
| 258 | +* Remove deprecated `redis-trib` CLI program. (#281) |
| 259 | +* Add `-fno-omit-frame-pointer` to default compilation flags to improve |
| 260 | + debuggability. (Redis#12973) |
| 261 | +* Refactor the per-slot dict-array db.c into a new kvstore data structure. |
| 262 | + (Redis#12822) |
| 263 | +* Unified database rehash method for both standalone and cluster modes. |
| 264 | + (Redis#12848) |
| 265 | +* Clarify and decouple the sampling logic in eviction to improve readability. |
| 266 | + (Redis#12781) |
| 267 | +* Rewrite large printf calls to smaller ones for readability. (Redis#12257) |
| 268 | + |
| 269 | +Experimental |
| 270 | +============ |
| 271 | +* Introduce Valkey Over RDMA transport (experimental). (#477) |
| 272 | + |
| 273 | +We appreciate the efforts of all who contributed code to this release! |
| 274 | + |
| 275 | +lan Slang, Binbin, Brennan, Chen Tianjie, Cui Fliter, Daniel House, Darren Jiang, |
| 276 | +David Carlier, Debing Sun, Dingrui, Dmitry Polyakovsky, Eran Liberty, Gabi Ganam, |
| 277 | +George Guimares, Guillaume Koenig, Guybe, Harkrishn Patro, Hassaan Khan, Hwang Si Yeon, |
| 278 | +ICHINOSE Shogo, icy17, Ikko Eltociear Ashimine, iKun, Itamar Haber, Jachin, Jacob Murphy, |
| 279 | +Jason Elbaum, Jeff Liu, John Sully, John Vandenberg, Jonathan Wright, Jonghoonpark, Joe Hu, |
| 280 | +Josiah Carlson, Juho Kim, judeng, Jun Luo, K.G. Wang, Karthik Subbarao, Karthick Ariyaratnam, |
| 281 | +kell0gg, Kyle Kim, Leibale Eidelman, LiiNen, Lipeng Zhu, Lior Kogan, Lior Lahav, Madelyn Olson, |
| 282 | +Makdon, Maria Markova, Mason Hall, Matthew Douglass, meiravgri, michalbiesek, Mike Dolan, |
| 283 | +Mikel Olasagasti Uranga, Moshe Kaplan, mwish, naglera, NAM UK KIM, Neal Gompa, nitaicaro, |
| 284 | +Nir Rattner, Oran Agra, Ouri Half, Ozan Tezcan, Parth, PatrickJS, Pengfei Han, Pierre, Ping Xie, |
| 285 | +poiuj, pshankinclarke, ranshid, Ronen Kalish, Roshan Khatri, Samuel Adetunji, Sankar, secwall, |
| 286 | +Sergey Fedorov, Sher_Sun, Shivshankar, skyfirelee, Slava Koyfman, Subhi Al Hasan, sundb, |
| 287 | +Ted Lyngmo, Thomas Fline, tison, Tom Morris, Tyler Bream, uriyage, Viktor Söderqvist, Vitaly, |
| 288 | +Vitah Lin, VoletiRam, w. ian douglas, WangYu, Wen Hui, Wenwen Chen, Yaacov Hazan, Yanqi Lv, |
| 289 | +Yehoshua Hershberg, Yves LeBras, zalj, Zhao Zhao, zhenwei pi, zisong.cw |
0 commit comments