├── redis-cli.exe ├── redis-server.exe ├── redis-benchmark.exe ├── redis-check-aof.exe ├── redis-check-rdb.exe ├── install_redis.cmd ├── LICENSE ├── SECURITY.md ├── redis.conf ├── README.md └── RELEASENOTES /redis-cli.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkteco-home/redis-windows/HEAD/redis-cli.exe -------------------------------------------------------------------------------- /redis-server.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkteco-home/redis-windows/HEAD/redis-server.exe -------------------------------------------------------------------------------- /redis-benchmark.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkteco-home/redis-windows/HEAD/redis-benchmark.exe -------------------------------------------------------------------------------- /redis-check-aof.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkteco-home/redis-windows/HEAD/redis-check-aof.exe -------------------------------------------------------------------------------- /redis-check-rdb.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zkteco-home/redis-windows/HEAD/redis-check-rdb.exe -------------------------------------------------------------------------------- /install_redis.cmd: -------------------------------------------------------------------------------- 1 | @echo on 2 | cd /d %~dp0 3 | sc create redis binPath= "\"%CD%\redis-server.exe\" --service-run \"%CD%\redis.conf\"" DisplayName= "Redis" start= auto depend= TCPIP 4 | sc description redis "Redis Cache Service" 5 | net start redis 6 | 7 | 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022,2023 zkteco-home 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | This section outlines which versions of Redis for Windows are currently supported with security updates. 6 | 7 | | Version | Supported | 8 | | ------------- | ------------------ | 9 | | 8.2.x (win) | :white_check_mark: | 10 | | 7.0.x (win) | :x: | 11 | | 6.2.x (win) | :x: | 12 | | < 6.2 (win) | :x: | 13 | 14 | > Note: Versions marked `(win)` are Windows-adapted builds. Security support is provided exclusively for these Windows-specific versions. 15 | 16 | 17 | ## Reporting a Vulnerability 18 | 19 | If you discover a security vulnerability in Redis for Windows, please report it promptly using the following steps: 20 | 21 | 1. **Do not disclose the vulnerability publicly** (e.g., in issues, discussions, or social media) before it is addressed. 22 | 2. Send a detailed description of the vulnerability to [my9988@126.com]. Include: 23 | - Steps to reproduce the vulnerability. 24 | - Affected versions of Redis for Windows. 25 | - Potential impact of the vulnerability. 26 | - Any suggested fixes (if known). 27 | 3. You can expect an initial response within 48 hours acknowledging receipt of your report. 28 | 4. We will investigate the vulnerability and provide updates on our progress at least once per week. 29 | 5. If the vulnerability is accepted: We will work on a fix and coordinate a disclosure timeline with you. A security advisory will be published once the fix is released. 30 | 6. If the vulnerability is declined: We will provide a detailed explanation of our reasoning. 31 | 32 | 33 | Thank you for helping keep Redis for Windows secure! 34 | -------------------------------------------------------------------------------- /redis.conf: -------------------------------------------------------------------------------- 1 | # Save the DB to disk. 2 | # save [ ...] 3 | # 4 | # Redis will save the DB if the given number of seconds elapsed and it 5 | # surpassed the given number of write operations against the DB. 6 | # 7 | # Snapshotting can be completely disabled with a single empty string argument 8 | # as in following example: 9 | # 10 | # save "" 11 | # 12 | # Unless specified otherwise, by default Redis will save the DB: 13 | # * After 3600 seconds (an hour) if at least 1 change was performed 14 | # * After 300 seconds (5 minutes) if at least 100 changes were performed 15 | # * After 60 seconds if at least 10000 changes were performed 16 | # 17 | # You can set these explicitly by uncommenting the following line. 18 | # 19 | # save 3600 1 300 100 60 10000 20 | 21 | save "" 22 | port 6379 23 | requirepass '' 24 | maxmemory 512mb 25 | appendonly no 26 | maxmemory-policy allkeys-lru 27 | 28 | # Examples: 29 | # 30 | # bind 192.168.1.100 10.0.0.1 # listens on two specific IPv4 addresses 31 | # bind 127.0.0.1 ::1 # listens on loopback IPv4 and IPv6 32 | # bind * -::* # like the default, all available interfaces 33 | # 34 | # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the 35 | # internet, binding to all the interfaces is dangerous and will expose the 36 | # instance to everybody on the internet. So by default we uncomment the 37 | # following bind directive, that will force Redis to listen only on the 38 | # IPv4 and IPv6 (if available) loopback interface addresses (this means Redis 39 | # will only be able to accept client connections from the same host that it is 40 | # running on). 41 | # 42 | # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES 43 | # COMMENT OUT THE FOLLOWING LINE. 44 | # 45 | # You will also need to set a password unless you explicitly disable protected 46 | # mode. 47 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 48 | 49 | bind 127.0.0.1 50 | 51 | # Redis supports recording timestamp annotations in the AOF to support restoring 52 | # the data from a specific point-in-time. However, using this capability changes 53 | # the AOF format in a way that may not be compatible with existing AOF parsers. 54 | #aof-timestamp-enabled no 55 | 56 | # Since version 5 of RDB a CRC64 checksum is placed at the end of the file. 57 | # This makes the format more resistant to corruption but there is a performance 58 | # hit to pay (around 10%) when saving and loading RDB files, so you can disable it 59 | # for maximum performances. 60 | # 61 | # RDB files created with checksum disabled have a checksum of zero that will 62 | # tell the loading code to skip the check. 63 | 64 | rdbchecksum no 65 | 66 | # By default protected mode is enabled. You should disable it only if 67 | # you are sure you want clients from other hosts to connect to Redis 68 | # even if no authentication is configured. 69 | 70 | protected-mode yes 71 | 72 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # This is an unofficial version of Redis for Windows X64 3 | 4 | It includes several new user-facing features, significant performance 5 | optimizations, and many other improvements. It also includes changes that 6 | potentially break backwards compatibility with older versions. We urge users to 7 | review the release notes carefully before upgrading. 8 | 9 | In particular, users should be aware of the following changes: 10 | 11 | 1. It stores AOF as multiple files in a folder; see Multi-Part AOF below. 12 | (automatically migrated an old-style AOF file (appendonly.aof) into the AOF directory (appendonlydir)) 13 | 14 | 2. It uses a new version 10 format for RDB files, which is incompatible 15 | with older versions. 16 | 17 | 3. It converts ziplist encoded keys to listpacks on the fly when loading 18 | an older RDB format. Conversion applies to loading a file from disk or 19 | replicating from a Redis master and will slightly increase loading time. 20 | 21 | 22 | 23 | 24 | If you want to know more, this is a list of selected starting points: 25 | 26 | 27 | Introduction to Redis data types. https://redis.io/topics/data-types-intro 28 | 29 | Try Redis directly inside your browser. https://try.redis.io 30 | 31 | The full list of Redis commands. https://redis.io/commands 32 | 33 | There is much more inside the official Redis documentation. https://redis.io/documentation 34 | 35 | ## DISCLAIMER 36 | 37 | This release is based on [Redis](https://github.com/redis/redis). It has passed all the standard tests. 38 | 39 | Due to the many functional differences between windows and linux,There are still unknown issues/bugs, in particular there is a bug to work properly in certain scenarios. 40 | If you download and install it, you accept the following agreement by default: 41 | 42 | NO LIABILITY FOR DAMAGES 43 | 44 | In no event shall the author of this Software be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if the Author of this Software has been advised of the possibility of such damages. 45 | 46 | 47 | ## Building from source code on Windows 48 | 49 | - Redis binaries are built with the original source [Redis](https://github.com/redis/redis) and have been compiled with Visual Studio 2022 to obtain higher performance and better stability than the binaries built by Cygwin, MSYS, or even WSL2. 50 | 51 | - Redis can be installed as a Windows Service. 52 | 53 | ## Supported Windows Versions 54 | 55 | - Windows Server 2008/2012/2016/2019/2022 x64 56 | - Windows 7/10/11 x64 57 | 58 | 59 | 60 | ## Default configrations 61 | 62 | save "" 63 | maxmemory 512mb 64 | appendonly no 65 | maxmemory-policy allkeys-lru 66 | 67 | - if you want to modify parameters,it is recommanded you edit the redis.conf file 68 | 69 | ## Support latest RedisJson 70 | 71 | edit redis.conf and add the following parameters: 72 | 73 | enable-module-command yes 74 | loadmodule rejson.dll 75 | 76 | ReJson.dll download: 77 | https://github.com/zkteco-home/RedisJson 78 | 79 | ## Running Redis as a Service 80 | 81 | - Self elevation of the Redis executable so that service commands would work from a non-elevated command prompt. 82 | 83 | - Service naming so that multiple instances of the Redis service could be installed on one machine. 84 | 85 | - Automatically adjusting folder permissions so that when Redis is run under the NETWORK SERVICE account it could modify the files in the installation directory. 86 | 87 | 88 | 89 | ### Run install_redis.cmd as Administrator (recommanded) 90 | 91 | you also can use the following command and manage redis service: 92 | 93 | 94 | Installing the Service 95 | ------------------------ 96 | 97 | *--service-install* 98 | 99 | This must be the first argument on the redis-server command line. Arguments after this are passed in the order they occur to Redis when the service is launched. The service will be configured as Autostart and will be launched as "NT AUTHORITY\\NetworkService". Upon successful installation a success message will be displayed and Redis will exit. 100 | 101 | This command does not start the service. 102 | 103 | For instance: 104 | 105 | redis-server --service-install redis.conf --loglevel verbose 106 | 107 | Uninstalling the Service 108 | ------------------------ 109 | 110 | *--service-uninstall* 111 | 112 | This will remove the Redis service configuration information from the registry. Upon successful uninstallation a success message will be displayed and Redis will exit. 113 | 114 | This does command not stop the service. 115 | 116 | For instance: 117 | 118 | redis-server --service-uninstall 119 | 120 | Starting the Service 121 | -------------------- 122 | 123 | *--service-start* 124 | 125 | This will start the Redis service. Upon successful start, a success message will be displayed and Redis will begin running. 126 | 127 | For instance: 128 | 129 | redis-server --service-start 130 | 131 | Stopping the Service 132 | -------------------- 133 | 134 | *--service-stop* 135 | 136 | This will stop the Redis service. Upon successful termination a success message will be displayed and Redis will exit. 137 | 138 | For instance: 139 | 140 | redis-server --service-stop 141 | 142 | Naming the Service 143 | ------------------ 144 | 145 | *--service-name **name*** 146 | 147 | This optional argument may be used with any of the preceding commands to set the name of the installed service. This argument should follow the service-install, service-start, service-stop or service-uninstall commands, and precede any arguments to be passed to Redis via the service-install command. 148 | 149 | The following would install and start three separate instances of Redis as a service: 150 | 151 | redis-server --service-install --service-name redisService1 redis.conf 152 | 153 | redis-server --service-start --service-name redisService1 154 | 155 | The following would stop and uninstall three separate instances of Redis as a service: 156 | 157 | redis-server --service-stop --service-name redisService1 158 | 159 | redis-server --service-uninstall --service-name redisService1 160 | 161 | 162 | Sentinel for Redis Server on Windows 163 | ------------------------------------ 164 | 165 | 166 | After you have edited and created the necessary configuration files,you must open the necessary firewall port. you can install Redis Sentinel from the command prompt as follows: 167 | 168 | 169 | redis-server --service-install --service-name Sentinel sentinel.conf --sentinel 170 | 171 | ## Contribute 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | -------------------------------------------------------------------------------- /RELEASENOTES: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | Redis 7.0 Released May 04 12:00:00 IST 2022 3 | ================================================================================ 4 | 5 | 6 | Upgrade urgency LOW: This is the first Release Candidate of Redis 7.0. 7 | 8 | Redis Release Candidate (RC) versions are early versions that are made available 9 | for early adopters in the community to test them. We do not consider 10 | them suitable for production environments. 11 | 12 | Introduction to the Redis 7.0 release 13 | ===================================== 14 | 15 | Redis 7.0 includes several new user-facing features, significant performance 16 | optimizations, and many other improvements. It also includes changes that 17 | potentially break backwards compatibility with older versions. We urge users to 18 | review the release notes carefully before upgrading. 19 | 20 | In particular, users should be aware of the following changes: 21 | 22 | 1. Redis 7 stores AOF as multiple files in a folder; see Multi-Part AOF below. 23 | 2. Redis 7 uses a new version 10 format for RDB files, which is incompatible 24 | with older versions. 25 | 3. Redis 7 converts ziplist encoded keys to listpacks on the fly when loading 26 | an older RDB format. Conversion applies to loading a file from disk or 27 | replicating from a Redis master and will slightly increase loading time. 28 | 4. See sections about breaking changes mentioned below. 29 | 30 | Here is a comprehensive list of changes in this release compared to 6.2.6. 31 | Each one includes the PR number that added it so that you can get more details 32 | at https://github.com/redis/redis/pull/ 33 | 34 | New Features 35 | ============ 36 | 37 | * Redis Functions: A new way to extend Redis with server-side scripts (#8693) 38 | see https://redis.io/topics/functions-intro 39 | * ACL: Fine-grained key-based permissions and allow users to support multiple 40 | sets of command rules with selectors (#9974) 41 | see https://redis.io/topics/acl#key-permissions and https://redis.io/topics/acl#selectors. 42 | * Cluster: Sharded (node-specific) Pub/Sub support (#8621) 43 | see https://redis.io/topics/pubsub#sharded-pubsub 44 | * First-class handling of sub-commands in most contexts (affecting ACL 45 | categories, INFO commandstats, etc.) (#9504, #10147) 46 | * Command metadata and documentation (#10104) 47 | see https://redis.io/commands/command-docs, https://redis.io/topics/command-tips 48 | * Command key-specs. A better way for clients to locate key arguments and their 49 | read/write purpose (#8324, #10122, #10167) 50 | see https://redis.io/topics/key-specs 51 | * Multi-Part AOF mechanism to avoid AOF rewrite overheads (#9788) 52 | * Cluster: Support for hostnames, instead of IP addresses only (#9530) 53 | * Improved management of memory consumed by network buffers, and an option to 54 | drop clients when total memory exceeds a limit (#8687) 55 | * Cluster: A mechanism for disconnecting cluster bus connections to prevent 56 | uncontrolled buffer growth (#9774) 57 | * AOF: Timestamp annotations and support for point-in-time recovery (#9326) 58 | * Lua: support Function flags in EVAL scripts (#10126) 59 | see https://redis.io/topics/eval-intro#eval-flags 60 | * Lua: Support RESP3 reply for Verbatim and Big-Number types (#9202) 61 | * Lua: Get Redis version via redis.REDIS_VERSION, redis.REDIS_VERSION_NUM (#10066) 62 | 63 | New user commands or command arguments 64 | -------------------------------------- 65 | 66 | * ZMPOP, BZMPOP commands (#9484) 67 | * LMPOP, BLMPOP commands (#9373) 68 | * SINTERCARD, ZINTERCARD commands (#8946, #9425) 69 | * SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB (#8621) 70 | * EXPIRETIME and PEXPIRETIME commands (#8474) 71 | * EXPIRE command group supports NX/XX/GT/LT options (#2795) 72 | * SET command supports combining NX and GET flags (#8906) 73 | * BITPOS, BITCOUNT accepts BIT index (#9324) 74 | * EVAL_RO, EVALSHA_RO command variants, to run on read-only replicas (#8820) 75 | * SORT_RO command, to run on read-only replicas (#9299) 76 | * SHUTDOWN arguments: NOW, FORCE, ABORT (#9872) 77 | * FUNCTION *, FCALL, FCALL_RO - https://redis.io/commands/function-load 78 | * CONFIG SET/GET can handle multiple configs atomically, in one call (#9748, #9914) 79 | * QUIT promoted to be a proper command, HOST: and POST demoted (#9798) 80 | * XADD supports auto sequence number via -* (#9217) 81 | 82 | New administrative and introspection commands and command arguments 83 | ------------------------------------------------------------------- 84 | 85 | * COMMAND DOCS (#9656, #10056, #10104) 86 | * COMMAND LIST (#9504) 87 | * COMMAND INFO accepts sub-commands as args, and no args too (#9504, #10056) 88 | * LATENCY HISTOGRAM (#9462) 89 | * CLUSTER LINKS (#9774) 90 | * CLUSTER DELSLOTSRANGE and CLUSTER ADDSLOTSRANGE (#9445) 91 | * CLIENT NO-EVICT (#8687) 92 | * ACL DRYRUN (#9974) 93 | * SLOWLOG GET supports passing in -1 to get all entries (#9018) 94 | 95 | Command replies that have been extended 96 | --------------------------------------- 97 | 98 | * COMMAND and COMMAND INFO extended with tips, key-specs and sub-commands 99 | see https://redis.io/commands/command 100 | * ACL CAT, COMMAND LIST list sub-commands (#10127) 101 | * MODULE LIST reply includes path and args (#4848) 102 | * OBJECT ENCODING returns listpack instead of ziplist (#8887, #9366) 103 | * CLUSTER SLOTS hostname support (#9530) 104 | * COMMAND command: Added the `blocking` and `module` flags (#10104, #9656) 105 | 106 | 107 | Potentially Breaking Changes 108 | ============================ 109 | 110 | * Modifying the bind parameter to a non-default value will no longer implicitly 111 | disable protected-mode (#9034) 112 | * Remove EVAL script verbatim replication, propagation, and deterministic 113 | execution logic (#9812) 114 | This has been deprecated and off by default since Redis 6 and is no longer 115 | supported. 116 | * ACL: pub/sub channels are blocked by default (acl-pubsub-default=resetchannels) (#10181) 117 | * SCRIPT LOAD and SCRIPT FLUSH are no longer propagated to replicas / AOF (#9812) 118 | * ACL: Declarations of duplicate ACL users in startup files and command line 119 | arguments will result in an error, whereas previously the last declaration 120 | would overwrite the others. (#9330) 121 | * Replication: TTLs are always replicated as absolute (not relative) millisecond 122 | timestamps (#8474) 123 | * Fixes in handling multi-key commands with expired keys on writable replicas (#9572) 124 | * CONFIG SET maxmemory returns before starting eviction (#10019) 125 | * AOF: The new Multi-Part mechanism stores data as a set of multiple files in a 126 | designated folder (#9788) 127 | * Remove STRALGO command, preserve LCS a standalone command which only works on 128 | keys (#9799) 129 | * Remove gopher protocol support (#9057) 130 | * MODULE and DEBUG commands disabled (protected) by default, for better security (#9920) 131 | * Snapshot-creating and other admin commands in MULTI/EXEC transactions are now 132 | rejected (#10015) 133 | * PING is now rejected with -MASTERDOWN when replica-serve-stale-data=no (#9757) 134 | * ACL GETUSER reply now uses ACL syntax for `keys` and `channels` (#9974) 135 | * COMMAND reply drops `random` and `sort-for-scripts` flags, which are now part 136 | of command tips (#10104) 137 | * LPOP/RPOP with count against non-existing list return null array (#10095) 138 | * INFO commandstats now shows the stats per sub-command (#9504) 139 | * ZPOPMIN/ZPOPMAX used to produce wrong replies when count is 0 with non-zset (#9711) 140 | * LPOP/RPOP used to produce wrong replies when count is 0 (#9692) 141 | * CONFIG GET bind now returns the current value in effect, even if the implicit 142 | default is in use (#9034) 143 | * CONFIG REWRITE now rewrites the list of modules to load (#4848) 144 | * Config: repl-diskless-sync is now set to yes by default (#10092) 145 | * When shutting down, Redis can optionally wait for replicas to catch up on the 146 | replication link (#9872) 147 | * Most CONFIG SET, REWRITE, RESETSTAT commands are now allowed during loading (#9878) 148 | * READONLY and READWRITE commands are now allowed when loading and on stale 149 | replicas (#7425) 150 | * Fix ACL category for SELECT, WAIT, ROLE, LASTSAVE, READONLY, READWRITE, ASKING (#9208) 151 | * RESET is now allowed even when on unauthenticated connections (#9798) 152 | * SCRIPT LOAD is now allowed on stale replicas (#10126) 153 | 154 | 155 | Security improvements 156 | ===================== 157 | 158 | * Sensitive configs and commands blocked (protected) by default (#9920) 159 | * Improve bind and protected-mode config handling (#9034) 160 | * Sentinel: avoid logging auth-pass value (#9652) 161 | * redis-cli: sensitive commands bypass the history file (#8895) 162 | 163 | 164 | Performance and resource utilization improvements 165 | ================================================= 166 | 167 | * Significant memory saving and latency improvements in cluster mode (#9356) 168 | * Significant memory savings in case of many hash or zset keys (#9228) 169 | * Replication backlog and replicas use one global shared replication buffer (#9166) 170 | * Significant reduction of copy-on-write memory overheads (#8974) 171 | * Free unused capacity in the cluster send buffer (#9255) 172 | * Memory efficiency, make full use of client struct memory for reply buffers (#8968) 173 | * Replace ziplist with listpack in Hash, List, Zset (#8887, #9366, #9740) 174 | * Add support for list type to store elements larger than 4GB (#9357) 175 | * Reuse temporary client objects for blocked clients by module (#9940) 176 | * Remove command argument count limit, dynamically grow argv buffer (#9528) 177 | * Optimize list type operations to seek from the nearest end (#9454) 178 | * Improvements in fsync to avoid large writes to disk (#9409) 179 | * BITSET and BITFIELD SET only propagated when the value actually changed (#9403) 180 | * Improve latency when a client is unblocked by module timer (#9593) 181 | 182 | 183 | Other General Improvements 184 | ========================== 185 | 186 | * Make partial sync possible after master reboot (#8015) 187 | * Always create a base AOF file when redis starts from empty (#10102) 188 | * Replica keep serving data during repl-diskless-load=swapdb for better 189 | availability (#9323) 190 | 191 | 192 | Changes in CLI tools 193 | ==================== 194 | * redis-cli --json, and -2 options (#9954) 195 | * redis-cli --scan, add sleep interval option (#3751) 196 | * redis-cli --replica optimization, skip RDB generation (#10044) 197 | * redis-cli --functions-rdb, generate RDB with Functions only (#9968) 198 | * redis-cli -X, take an arbitrary arg from stdin, extend --cluster call take -x (#9980) 199 | * redis-benchmark -x takes an argument from stdin (#9130) 200 | * redis-benchmark, Added URI support (#9314) 201 | * redis-cli monitor and pubsub can be aborted with Ctrl+C, keeping the cli alive (#9347) 202 | 203 | 204 | Platform / toolchain support related improvements 205 | ================================================= 206 | 207 | * Upgrade jemalloc 5.2.1 (#9623) 208 | * Fix RSS metrics on NetBSD and OpenBSD (#10116, #10149) 209 | * Check somaxconn system settings on macOS, FreeBSD and OpenBSD (#9972) 210 | * Better fsync on MacOS, improve power failure safety (#9545) 211 | 212 | 213 | New configuration options 214 | ========================= 215 | 216 | * CONFIG SET/GET can handle multiple configs in one call (#9748, #9914) 217 | * Support glob pattern matching for config include files (#8980) 218 | * appenddirname, folder where multi-part AOF files are stored (#9788) 219 | * shutdown-timeout, default 10 seconds (#9872) 220 | * maxmemory-clients, allows limiting the total memory usage by all clients (#8687) 221 | * cluster-port, can control the bind port of cluster bus (#9389) 222 | * bind-source-addr, configuration argument control IP of outgoing connections (#9142) 223 | * busy-reply-threshold, alias for the old lua-time-limit (#9963) 224 | * repl-diskless-sync-max-replicas, allows faster replication in some cases (#10092) 225 | * latency-tracking, enabled by default, and latency-tracking-info-percentiles (#9462) 226 | * cluster-announce-hostnameand cluster-preferred-endpoint-type (#9530) 227 | * cluster-allow-pubsublocal-when-down (#8621) 228 | * cluster-link-sendbuf-limit (#9774) 229 | * list-max-listpack-*, hash-max-listpack-*, zset-max-listpack-* as aliases for 230 | the old ziplist configs (#8887, #9366, #9740) 231 | 232 | 233 | INFO fields and introspection changes 234 | ===================================== 235 | 236 | * INFO: latencystats section (#9462) 237 | * INFO: total_active_defrag_time and current_active_defrag_time (#9377) 238 | * INFO: total_eviction_exceeded_time and current_eviction_exceeded_time (#9031) 239 | * INFO: evicted_clients (#8687) 240 | * INFO: mem_cluster_links, total_cluster_links_buffer_limit_exceeded (#9774) 241 | * INFO: current_cow_peak (#8974) 242 | * INFO: Remove aof_rewrite_buffer_length (#9788) 243 | * MEMORY STATS: Report slot to keys map size in in cluster mode (#10017) 244 | * INFO MEMORY: changes to separate memory usage of Functions and EVAL (#9780) 245 | * INFO MEMORY: Add mem_total_replication_buffers, change meaning of 246 | mem_clients_slaves (#9166) 247 | * CLIENT LIST: tot-mem, multi-mem (#8687) 248 | * CLIENT LIST, INFO: Show RESP version (#9508) 249 | * SENTINEL INFO: tilt_mode_since (#9000) 250 | * LATENCY: Track module-acquire-GIL latency (#9608) 251 | 252 | 253 | Module API changes 254 | ================== 255 | 256 | * Add API for replying with RESP3 types (#8521, #9639, #9632) 257 | * Add API for parsing RESP3 replies from RM_Call (#9202) 258 | * Add RM_Call '0' and '3' flags to control RESP version to be used (#9202) 259 | * Add Support for validating ACL explicitly (#9309, #9974) 260 | * Add missing list type functionality APIs (#8439) 261 | * Add API for yielding to Redis events during long busy jobs (#9963) 262 | * Add API for registering other file descriptors to the Redis event loop (#10001) 263 | * Enhance mem_usage/free_effort/unlink/copy and IO callbacks to have key name 264 | and DB index (#8999) 265 | * Enhance mem_usage callback to get the requested sample size (#9612) 266 | * RM_GetContextFlags: CTX_FLAGS_ASYNC_LOADING, CTX_FLAGS_RESP3 (#9323, #9202) 267 | * Mark APIs as non-experimental (#9983) 268 | * RM_CreateSubcommand (#9504) 269 | * RM_KeyExists (#9600) 270 | * RM_TrimStringAllocation (#9540) 271 | * RM_LoadDataTypeFromStringEncver (#9537) 272 | * RM_MonotonicMicroseconds (#10101) 273 | * Add ReplAsyncLoad event and deprecate the ReplBackup event (#9323) 274 | * Add RM_SetModuleOptions OPTIONS_HANDLE_REPL_ASYNC_LOAD flag (#9323) 275 | 276 | 277 | Bug Fixes 278 | ========= 279 | 280 | * Fix COMMAND GETKEYS on EVAL without keys (#9733) 281 | * Improve MEMORY USAGE with allocator overheads (#9095) 282 | * Unpause clients after manual failover ends instead of waiting for timed (#9676) 283 | * Lua: fix crash on a script call with many arguments, a regression in v6.2.6 (#9809) 284 | * Lua: Use all characters to calculate string hash to prevent hash collisions (#9449) 285 | * Prevent LCS from allocating temp memory over proto-max-bulk-len (#9817) 286 | * Tracking: Make invalidation messages always after command's reply (#9422) 287 | * Cluster: Hide empty replicas from CLUSTER SLOTS responses (#9287) 288 | * CLIENT KILL killed all clients when used with ID of 0 (#9853) 289 | * Fix bugs around lists with list-compress-depth (#9849, #9779) 290 | * Fix one in a blue moon LRU bug in RESTORE, RDB loading, and module API (#9279) 291 | * Reset lazyfreed_objects info field with RESETSTAT, test for stream lazyfree (#8934) 292 | * Fix RDB and list node compression for handling values larger than 4GB (#9776) 293 | * Fix a crash when adding elements larger than 2GB to a Set or Hash (#9916) 294 | * Diskless replication could not count as a change and skip next database SAVE (#9323) 295 | * Fix excessive stream trimming due to an overflow (#10068) 296 | * Safe and organized exit when receiving SIGTERM while loading (#10003) 297 | * Improve EXPIRE TTL overflow detection (#9839) 298 | * Add missed error counting for INFO errorstats (#9646) 299 | * DECRBY LLONG_MIN caused negation overflow (#9577) 300 | * Delay discarding cached master when full synchronization (#9398) 301 | * Fix Stream keyspace notification and persistence triggers in consumer 302 | creation and deletion (#9263) 303 | * Fix rank overflow in zset with more than 2B entries (#9249) 304 | * Avoid starting in check-aof / check-rdb / sentinel modes if only the folder 305 | name contains that name (#9215, #9176) 306 | * create the log file only after done parsing the entire config file (#6741) 307 | * redis-cli: Fix SCAN sleep interval for --bigkeys, --memkeys, --hotkeys (#9624) 308 | * redis-cli: Fix prompt to show the right DB num and transaction state after 309 | RESET (#9096) 310 | * Module API: fix possible propagation bugs in case a module calls CONFIG SET 311 | maxmemory outside a command (#10019, #9890) 312 | * Module API: carry through client RESP version to module blocked clients (#9634) 313 | * Module API: release clients blocked on module commands in cluster resharding 314 | and down state (#9483) 315 | * Sentinel: Fix availability after master reboot (#9438) 316 | * Sentinel: Fix memory leak with TLS (#9753) 317 | * Sentinel: Fix possible failover due to duplicate zero-port (#9240) 318 | * Sentinel: Fix issues with hostname support (#10146) 319 | * Sentinel: Fix election failures on certain container environments (#10197) 320 | 321 | 322 | Known Issues 323 | ============ 324 | 325 | This is a list of known issues that affect this release, and are planned to be 326 | fixed or completed before Redis 7 is officially released: 327 | 328 | * Module APIs for modules to provide additional command meta-data are still 329 | missing. 330 | * Module APIs for supporting the new ACL selectors are still missing. 331 | * ACL key access selectors do not yet apply to SORT with GET/BY does. 332 | * Multi-Part AOF support in redis-check-aof is still missing. 333 | 334 | Thanks to all the users and developers who made this release possible. 335 | We'll follow up with more RC releases, until the code looks production ready 336 | and we don't get reports of serious issues for a while. 337 | 338 | A special thank you for the amount of work put into this release by: 339 | 340 | - Guy Benoish 341 | - Meir Shpilraien 342 | - Oran Agra 343 | - Chen Yang 344 | - Zhu Binbin 345 | - Yoav Steinberg 346 | - sundb 347 | - Madelyn Olson 348 | - Yossi Gottlieb 349 | - Viktor Söderqvist 350 | - Wang Yuan 351 | - Harkrishn Patro 352 | - Ozan Tezcan 353 | - Wen Hui 354 | - Huang Zhw 355 | - Nan Yan 356 | - Filipe Oliveira 357 | - Eduardo Semprebon 358 | - Yaacov Hazan 359 | - Itamar Haber 360 | - Zhao Zhao 361 | - Itay Perry 362 | - Ning Sun 363 | - zhugezy 364 | - menwen 365 | - Andy Pan 366 | 367 | --------------------------------------------------------------------------------