diff options
-rw-r--r-- | 00-RELEASENOTES | 371 | ||||
-rw-r--r-- | src/version.h | 4 |
2 files changed, 362 insertions, 13 deletions
diff --git a/00-RELEASENOTES b/00-RELEASENOTES index f745d70a3..1541278c4 100644 --- a/00-RELEASENOTES +++ b/00-RELEASENOTES @@ -1,16 +1,365 @@ -Hello! This file is just a placeholder, since this is the "unstable" branch -of Redis, the place where all the development happens. +================================================================================ +Redis 7.0 RC1 Released Mon Jan 31 12:00:00 IST 2022 +================================================================================ -There is no release notes for this branch, it gets forked into another branch -every time there is a partial feature freeze in order to eventually create -a new stable release. +Upgrade urgency LOW: This is the first Release Candidate of Redis 7.0. -Usually "unstable" is stable enough for you to use it in development environments -however you should never use it in production environments. It is possible -to download the latest stable release here: +Redis Release Candidate (RC) versions are early versions that are made available +for early adopters in the community to test them. We do not consider +them suitable for production environments. - http://download.redis.io/releases/redis-stable.tar.gz +Introduction to the Redis 7.0 release +===================================== -More information is available at https://redis.io +Redis 7.0 includes several new user-facing features, significant performance +optimizations, and many other improvements. It also includes changes that +potentially break backwards compatibility with older versions. We urge users to +review the release notes carefully before upgrading. + +In particular, users should be aware of the following changes: + +1. Redis 7 stores AOF as multiple files in a folder; see Multi-Part AOF below. +2. Redis 7 uses a new version 10 format for RDB files, which is incompatible + with older versions. +3. Redis 7 converts ziplist encoded keys to listpacks on the fly when loading + an older RDB format. Conversion applies to loading a file from disk or + replicating from a Redis master and will slightly increase loading time. +4. See sections about breaking changes mentioned below. + +Here is a comprehensive list of changes in this release compared to 6.2.6. +Each one includes the PR number that added it so that you can get more details +at https://github.com/redis/redis/pull/<number> + +New Features +============ + +* Redis Functions: A new way to extend Redis with server-side scripts (#8693) + see https://redis.io/topics/functions-intro +* ACL: Fine-grained key-based permissions and allow users to support multiple + sets of command rules with selectors (#9974) + see https://redis.io/topics/acl#key-permissions and https://redis.io/topics/acl#selectors. +* Cluster: Sharded (node-specific) Pub/Sub support (#8621) + see https://redis.io/topics/pubsub#sharded-pubsub +* First-class handling of sub-commands in most contexts (affecting ACL + categories, INFO commandstats, etc.) (#9504, #10147) +* Command metadata and documentation (#10104) + see https://redis.io/commands/command-docs, https://redis.io/topics/command-tips +* Command key-specs. A better way for clients to locate key arguments and their + read/write purpose (#8324, #10122, #10167) + see https://redis.io/topics/key-specs +* Multi-Part AOF mechanism to avoid AOF rewrite overheads (#9788) +* Cluster: Support for hostnames, instead of IP addresses only (#9530) +* Improved management of memory consumed by network buffers, and an option to + drop clients when total memory exceeds a limit (#8687) +* Cluster: A mechanism for disconnecting cluster bus connections to prevent + uncontrolled buffer growth (#9774) +* AOF: Timestamp annotations and support for point-in-time recovery (#9326) +* Lua: support Function flags in EVAL scripts (#10126) + see https://redis.io/topics/eval-intro#eval-flags +* Lua: Support RESP3 reply for Verbatim and Big-Number types (#9202) +* Lua: Get Redis version via redis.REDIS_VERSION, redis.REDIS_VERSION_NUM (#10066) + +New user commands or command arguments +-------------------------------------- + +* ZMPOP, BZMPOP commands (#9484) +* LMPOP, BLMPOP commands (#9373) +* SINTERCARD, ZINTERCARD commands (#8946, #9425) +* SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB (#8621) +* EXPIRETIME and PEXPIRETIME commands (#8474) +* EXPIRE command group supports NX/XX/GT/LT options (#2795) +* SET command supports combining NX and GET flags (#8906) +* BITPOS, BITCOUNT accepts BIT index (#9324) +* EVAL_RO, EVALSHA_RO command variants, to run on read-only replicas (#8820) +* SORT_RO command, to run on read-only replicas (#9299) +* SHUTDOWN arguments: NOW, FORCE, ABORT (#9872) +* FUNCTION *, FCALL, FCALL_RO - https://redis.io/commands/function-load +* CONFIG SET/GET can handle multiple configs atomically, in one call (#9748, #9914) +* QUIT promoted to be a proper command, HOST: and POST demoted (#9798) +* XADD supports auto sequence number via <ms>-* (#9217) + +New administrative and introspection commands and command arguments +------------------------------------------------------------------- + +* COMMAND DOCS (#9656, #10056, #10104) +* COMMAND LIST (#9504) +* COMMAND INFO accepts sub-commands as args, and no args too (#9504, #10056) +* LATENCY HISTOGRAM (#9462) +* CLUSTER LINKS (#9774) +* CLUSTER DELSLOTSRANGE and CLUSTER ADDSLOTSRANGE (#9445) +* CLIENT NO-EVICT (#8687) +* ACL DRYRUN (#9974) +* SLOWLOG GET supports passing in -1 to get all entries (#9018) + +Command replies that have been extended +--------------------------------------- + +* COMMAND and COMMAND INFO extended with tips, key-specs and sub-commands + see https://redis.io/commands/command +* ACL CAT, COMMAND LIST list sub-commands (#10127) +* MODULE LIST reply includes path and args (#4848) +* OBJECT ENCODING returns listpack instead of ziplist (#8887, #9366) +* CLUSTER SLOTS hostname support (#9530) +* COMMAND command: Added the `blocking` and `module` flags (#10104, #9656) + + +Potentially Breaking Changes +============================ + +* Modifying the bind parameter to a non-default value will no longer implicitly + disable protected-mode (#9034) +* Remove EVAL script verbatim replication, propagation, and deterministic + execution logic (#9812) + This has been deprecated and off by default since Redis 6 and is no longer + supported. +* ACL: pub/sub channels are blocked by default (acl-pubsub-default=resetchannels) (#10181) +* SCRIPT LOAD and SCRIPT FLUSH are no longer propagated to replicas / AOF (#9812) +* ACL: Declarations of duplicate ACL users in startup files and command line + arguments will result in an error, whereas previously the last declaration + would overwrite the others. (#9330) +* Replication: TTLs are always replicated as absolute (not relative) millisecond + timestamps (#8474) +* Fixes in handling multi-key commands with expired keys on writable replicas (#9572) +* CONFIG SET maxmemory returns before starting eviction (#10019) +* AOF: The new Multi-Part mechanism stores data as a set of multiple files in a + designated folder (#9788) +* Remove STRALGO command, preserve LCS a standalone command which only works on + keys (#9799) +* Remove gopher protocol support (#9057) +* MODULE and DEBUG commands disabled (protected) by default, for better security (#9920) +* Snapshot-creating and other admin commands in MULTI/EXEC transactions are now + rejected (#10015) +* PING is now rejected with -MASTERDOWN when replica-serve-stale-data=no (#9757) +* ACL GETUSER reply now uses ACL syntax for `keys` and `channels` (#9974) +* COMMAND reply drops `random` and `sort-for-scripts` flags, which are now part + of command tips (#10104) +* LPOP/RPOP with count against non-existing list return null array (#10095) +* INFO commandstats now shows the stats per sub-command (#9504) +* ZPOPMIN/ZPOPMAX used to produce wrong replies when count is 0 with non-zset (#9711) +* LPOP/RPOP used to produce wrong replies when count is 0 (#9692) +* CONFIG GET bind now returns the current value in effect, even if the implicit + default is in use (#9034) +* CONFIG REWRITE now rewrites the list of modules to load (#4848) +* Config: repl-diskless-sync is now set to yes by default (#10092) +* When shutting down, Redis can optionally wait for replicas to catch up on the + replication link (#9872) +* Most CONFIG SET, REWRITE, RESETSTAT commands are now allowed during loading (#9878) +* READONLY and READWRITE commands are now allowed when loading and on stale + replicas (#7425) +* Fix ACL category for SELECT, WAIT, ROLE, LASTSAVE, READONLY, READWRITE, ASKING (#9208) +* RESET is now allowed even when on unauthenticated connections (#9798) +* SCRIPT LOAD is now allowed on stale replicas (#10126) + + +Security improvements +===================== + +* Sensitive configs and commands blocked (protected) by default (#9920) +* Improve bind and protected-mode config handling (#9034) +* Sentinel: avoid logging auth-pass value (#9652) +* redis-cli: sensitive commands bypass the history file (#8895) + + +Performance and resource utilization improvements +================================================= + +* Significant memory saving and latency improvements in cluster mode (#9356) +* Significant memory savings in case of many hash or zset keys (#9228) +* Replication backlog and replicas use one global shared replication buffer (#9166) +* Significant reduction of copy-on-write memory overheads (#8974) +* Free unused capacity in the cluster send buffer (#9255) +* Memory efficiency, make full use of client struct memory for reply buffers (#8968) +* Replace ziplist with listpack in Hash, List, Zset (#8887, #9366, #9740) +* Add support for list type to store elements larger than 4GB (#9357) +* Reuse temporary client objects for blocked clients by module (#9940) +* Remove command argument count limit, dynamically grow argv buffer (#9528) +* Optimize list type operations to seek from the nearest end (#9454) +* Improvements in fsync to avoid large writes to disk (#9409) +* BITSET and BITFIELD SET only propagated when the value actually changed (#9403) +* Improve latency when a client is unblocked by module timer (#9593) + + +Other General Improvements +========================== + +* Make partial sync possible after master reboot (#8015) +* Always create a base AOF file when redis starts from empty (#10102) +* Replica keep serving data during repl-diskless-load=swapdb for better + availability (#9323) + + +Changes in CLI tools +==================== +* redis-cli --json, and -2 options (#9954) +* redis-cli --scan, add sleep interval option (#3751) +* redis-cli --replica optimization, skip RDB generation (#10044) +* redis-cli --functions-rdb, generate RDB with Functions only (#9968) +* redis-cli -X, take an arbitrary arg from stdin, extend --cluster call take -x (#9980) +* redis-benchmark -x takes an argument from stdin (#9130) +* redis-benchmark, Added URI support (#9314) +* redis-cli monitor and pubsub can be aborted with Ctrl+C, keeping the cli alive (#9347) + + +Platform / toolchain support related improvements +================================================= + +* Upgrade jemalloc 5.2.1 (#9623) +* Fix RSS metrics on NetBSD and OpenBSD (#10116, #10149) +* Check somaxconn system settings on macOS, FreeBSD and OpenBSD (#9972) +* Better fsync on MacOS, improve power failure safety (#9545) + + +New configuration options +========================= + +* CONFIG SET/GET can handle multiple configs in one call (#9748, #9914) +* Support glob pattern matching for config include files (#8980) +* appenddirname, folder where multi-part AOF files are stored (#9788) +* shutdown-timeout, default 10 seconds (#9872) +* maxmemory-clients, allows limiting the total memory usage by all clients (#8687) +* cluster-port, can control the bind port of cluster bus (#9389) +* bind-source-addr, configuration argument control IP of outgoing connections (#9142) +* busy-reply-threshold, alias for the old lua-time-limit (#9963) +* repl-diskless-sync-max-replicas, allows faster replication in some cases (#10092) +* latency-tracking, enabled by default, and latency-tracking-info-percentiles (#9462) +* cluster-announce-hostnameand cluster-preferred-endpoint-type (#9530) +* cluster-allow-pubsublocal-when-down (#8621) +* cluster-link-sendbuf-limit (#9774) +* list-max-listpack-*, hash-max-listpack-*, zset-max-listpack-* as aliases for + the old ziplist configs (#8887, #9366, #9740) + + +INFO fields and introspection changes +===================================== + +* INFO: latencystats section (#9462) +* INFO: total_active_defrag_time and current_active_defrag_time (#9377) +* INFO: total_eviction_exceeded_time and current_eviction_exceeded_time (#9031) +* INFO: evicted_clients (#8687) +* INFO: mem_cluster_links, total_cluster_links_buffer_limit_exceeded (#9774) +* INFO: current_cow_peak (#8974) +* INFO: Remove aof_rewrite_buffer_length (#9788) +* MEMORY STATS: Report slot to keys map size in in cluster mode (#10017) +* INFO MEMORY: changes to separate memory usage of Functions and EVAL (#9780) +* INFO MEMORY: Add mem_total_replication_buffers, change meaning of + mem_clients_slaves (#9166) +* CLIENT LIST: tot-mem, multi-mem (#8687) +* CLIENT LIST, INFO: Show RESP version (#9508) +* SENTINEL INFO: tilt_mode_since (#9000) +* LATENCY: Track module-acquire-GIL latency (#9608) + + +Module API changes +================== + +* Add API for replying with RESP3 types (#8521, #9639, #9632) +* Add API for parsing RESP3 replies from RM_Call (#9202) +* Add RM_Call '0' and '3' flags to control RESP version to be used (#9202) +* Add Support for validating ACL explicitly (#9309, #9974) +* Add missing list type functionality APIs (#8439) +* Add API for yielding to Redis events during long busy jobs (#9963) +* Add API for registering other file descriptors to the Redis event loop (#10001) +* Enhance mem_usage/free_effort/unlink/copy and IO callbacks to have key name + and DB index (#8999) +* Enhance mem_usage callback to get the requested sample size (#9612) +* RM_GetContextFlags: CTX_FLAGS_ASYNC_LOADING, CTX_FLAGS_RESP3 (#9323, #9202) +* Mark APIs as non-experimental (#9983) +* RM_CreateSubcommand (#9504) +* RM_KeyExists (#9600) +* RM_TrimStringAllocation (#9540) +* RM_LoadDataTypeFromStringEncver (#9537) +* RM_MonotonicMicroseconds (#10101) +* Add ReplAsyncLoad event and deprecate the ReplBackup event (#9323) +* Add RM_SetModuleOptions OPTIONS_HANDLE_REPL_ASYNC_LOAD flag (#9323) + + +Bug Fixes +========= + +* Fix COMMAND GETKEYS on EVAL without keys (#9733) +* Improve MEMORY USAGE with allocator overheads (#9095) +* Unpause clients after manual failover ends instead of waiting for timed (#9676) +* Lua: fix crash on a script call with many arguments, a regression in v6.2.6 (#9809) +* Lua: Use all characters to calculate string hash to prevent hash collisions (#9449) +* Prevent LCS from allocating temp memory over proto-max-bulk-len (#9817) +* Tracking: Make invalidation messages always after command's reply (#9422) +* Cluster: Hide empty replicas from CLUSTER SLOTS responses (#9287) +* CLIENT KILL killed all clients when used with ID of 0 (#9853) +* Fix bugs around lists with list-compress-depth (#9849, #9779) +* Fix one in a blue moon LRU bug in RESTORE, RDB loading, and module API (#9279) +* Reset lazyfreed_objects info field with RESETSTAT, test for stream lazyfree (#8934) +* Fix RDB and list node compression for handling values larger than 4GB (#9776) +* Fix a crash when adding elements larger than 2GB to a Set or Hash (#9916) +* Diskless replication could not count as a change and skip next database SAVE (#9323) +* Fix excessive stream trimming due to an overflow (#10068) +* Safe and organized exit when receiving SIGTERM while loading (#10003) +* Improve EXPIRE TTL overflow detection (#9839) +* Add missed error counting for INFO errorstats (#9646) +* DECRBY LLONG_MIN caused negation overflow (#9577) +* Delay discarding cached master when full synchronization (#9398) +* Fix Stream keyspace notification and persistence triggers in consumer + creation and deletion (#9263) +* Fix rank overflow in zset with more than 2B entries (#9249) +* Avoid starting in check-aof / check-rdb / sentinel modes if only the folder + name contains that name (#9215, #9176) +* create the log file only after done parsing the entire config file (#6741) +* redis-cli: Fix SCAN sleep interval for --bigkeys, --memkeys, --hotkeys (#9624) +* redis-cli: Fix prompt to show the right DB num and transaction state after + RESET (#9096) +* Module API: fix possible propagation bugs in case a module calls CONFIG SET + maxmemory outside a command (#10019, #9890) +* Module API: carry through client RESP version to module blocked clients (#9634) +* Module API: release clients blocked on module commands in cluster resharding + and down state (#9483) +* Sentinel: Fix availability after master reboot (#9438) +* Sentinel: Fix memory leak with TLS (#9753) +* Sentinel: Fix possible failover due to duplicate zero-port (#9240) +* Sentinel: Fix issues with hostname support (#10146) +* Sentinel: Fix election failures on certain container environments (#10197) + + +Known Issues +============ + +This is a list of known issues that affect this release, and are planned to be +fixed or completed before Redis 7 is officially released: + +* Module APIs for modules to provide additional command meta-data are still + missing. +* Module APIs for supporting the new ACL selectors are still missing. +* ACL key access selectors do not yet apply to SORT with GET/BY does. +* Multi-Part AOF support in redis-check-aof is still missing. + +Thanks to all the users and developers who made this release possible. +We'll follow up with more RC releases, until the code looks production ready +and we don't get reports of serious issues for a while. + +A special thank you for the amount of work put into this release by: + +- Guy Benoish +- Meir Shpilraien +- Oran Agra +- Chen Yang +- Zhu Binbin +- Yoav Steinberg +- sundb +- Madelyn Olson +- Yossi Gottlieb +- Viktor Söderqvist +- Wang Yuan +- Harkrishn Patro +- Ozan Tezcan +- Wen Hui +- Huang Zhw +- Nan Yan +- Filipe Oliveira +- Eduardo Semprebon +- Yaacov Hazan +- Itamar Haber +- Zhao Zhao +- Itay Perry +- Ning Sun +- zhugezy +- menwen +- Andy Pan -Happy hacking! diff --git a/src/version.h b/src/version.h index 89aef53fc..cddaae2b1 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ -#define REDIS_VERSION "255.255.255" -#define REDIS_VERSION_NUM 0x00ffffff +#define REDIS_VERSION "6.9.240" +#define REDIS_VERSION_NUM 0x000609f0 |