Redis 7.0.5 于2022年9月21 星期三 20:00:00 发布。
Redis 7.0 发行说明
升级紧急程度:
- LOW:不需要升级,除非有你想使用的新功能。
- 中等:对服务器进行升级,但并不紧急。
- HIGH:存在可能影响部分用户的严重错误。升级!
- CRITICAL:存在一个影响大多数用户的严重错误。尽快升级。
- 安全:版本中有安全修复。
升级紧迫性:SECURITY,包含对安全问题的修复。
安全修复:
(CVE-2022-35951) 在特定的流密钥上执行 XAUTOCLAIM 命令
带有特制 COUNT 参数的状态可能会导致整数溢出,
随后的堆溢出,并可能导致远程代码执行。
该问题影响 Redis 7.0.0 或更高版本
[由KAIST GoN的Xion(SeungHyun Lee)报道]。
模块 API 更改
- 修复与 M/W/S 标志一起使用时正确执行脚本的 RM_Call
处理脚本标志 (#11159) - 修复 RM_SetAbsExpire 和 RM_GetAbsExpire API 注册问题 (#11025, #8564)
Bug修复
- 修复 eviction 与lazy-free 结合使用且 maxmemory-eviction-tenacity 设置为 100 时的挂起 (#11237)
- 修复由于手动故障转移而导致副本可能尝试将自己设置为其主服务器时的崩溃 (#11263)
- 修复启用集群的副本节点可能将其主节点的主机名永久设置为“?”的错误 (#10696)
- 修复 Lua 脚本返回元表时的崩溃 (#11032)
修复了以前版本的 Redis 7.0 中的问题
- 修复 redis-cli 在发送 CLUSTER MEET 之前进行 DNS 查找 (#11151)
- 修复集群密钥迁移期间密钥延迟过期时的崩溃问题 (#11176)
- 修复 AOF 重写以在创建新文件时 fsync 旧 AOF 文件 (#11004)
- 修复一些涉及包含大于 1GB 条目的列表的崩溃 (#11242)
- 正确处理集群副本上具有非只读 shebang 的脚本 (#11223)
- 修复卸载模块时的内存泄漏 (#11147)
- 修复脚本忽略客户端跟踪 NOLOOP 的错误 (#11052)
- 在 MULTI-EXEC 中使用 FLUSHDB / FLUSHALL / SWAPDB 时修复客户端跟踪中断协议 (#11038)
- 修复 ACL:带有 GET 的 BITFIELD 和 SET / INCRBY 可以使用只读密钥权限执行 (#11086)
- 在请求模块信息部分时修复 INFO ALL 的缺失部分 (#11291)
==================================================== ===============================
Redis 7.0.4 于 2022 年 7 月 18 日星期一 12:00:00 发布
==================================================== ===============================
升级紧迫性:SECURITY,包含对安全问题的修复。
安全修复:
- (CVE-2022-31144) 流上特制的 XAUTOCLAIM 命令
处于特定状态的键可能会导致堆溢出,并且可能
远程代码执行。该问题影响 Redis 7.0.0 或更高版本。
==================================================== ===============================
Redis 7.0.3 于 2022 年 7 月 11 日星期一 12:00:00 发布
==================================================== ===============================
升级紧迫性:中等,特别是如果您使用的是以前版本的
Redis 7.0,包含对以前 7.0 版本中的错误的修复。
性能和资源利用改进
- 优化大型 ZRANGESTORE 上的 zset 转换 (#10789)
- 优化大集群发送 PING 的性能(#10624)
- 允许在集群模式下更快地重启 Redis (#10912)
INFO 字段和自省更改
- 将缺失的分片 pubsub keychannel 计数添加到 CLIENT LIST (#10895)
- 在 INFO STATS 中添加缺失的 pubsubshard_channels 字段 (#10929)
模块 API 更改
- 添加 RM_StringToULongLong 和 RM_CreateStringFromULongLong (#10889)
- 添加 RM_SetClientNameById 和 RM_GetClientNameById (#10839)
CLI 工具的变化
- 添加缺少的集群端口支持到 redis-cli --cluster (#10344)
其他一般改进
- 帐户分片 pubsub 通道内存消耗 (#10925)
- 在加载和陈旧模式下允许 ECHO (#10853)
- 集群:在迁移节点上抛出 -TRYAGAIN 而不是 -ASK 以获得多键
当节点只有一些键时的命令 (#9526)
Bug修复
- TLS:在连接关闭时通知客户端 (#10931)
- Fsync 目录,同时持久化 AOF 清单、RDB 文件和配置文件 (#10737)
- 进行修改的脚本不会因意外的 NOREPLICAS 错误而中断 (#10855)
- 集群:修复节点可能无法确认集群故障转移接管的错误
副本重启后 (#10798) - 集群:修复握手和集群分片调用期间的崩溃 (#10942)
修复了以前版本的 Redis 7.0 中的问题
- TLS:修复大量回复的问题 (#10909)
- 正确报告 vm.overcommit_memory 的启动警告 (#10841)
- redis-server 命令行允许在同一个参数中传递配置名称和值 (#10866)
- 支持 --save 命令行参数,没有向后兼容性的值 (#10866)
- 修复需要参数的 CLUSTER RESET 命令回归 (#10898)
==================================================== ===============================
Redis 7.0.2 于 IST 2022 年 6 月 12 日星期日 12:00:00 发布
==================================================== ===============================
升级紧迫性:中等,特别是如果您使用的是以前版本的
Redis 7.0,包含对以前 7.0 版本中的错误的修复。
Bug修复
- 修复了 SET 和 BITFIELD 命令被错误标记为可移动键的问题 (#10837)
7.0 中的回归可能导致来自集群客户端的过多往返。 - 修复 /proc/sys/vm/overcommit_memory 无法访问时的崩溃问题 (#10848)
7.0.1 中的回归导致某些配置在启动时崩溃。
==================================================== ===============================
Redis 7.0.1 于 IST 2022 年 6 月 8 日星期三 12:00:00 发布
==================================================== ===============================
升级紧迫性:中等,特别是如果您使用的是以前版本的
Redis 7.0,包含一些针对 7.0 新特性和重要的行为更改
修复了以前 7.0 版本中的错误。
改进
- 增加怀疑系统时钟源设置慢的警告
添加 --check-system 命令行选项。(#10636) - 允许只读脚本(*_RO 命令和带有
no-writes标志的命令)
在客户端暂停写入期间 (#10744) - 在 EVAL_RO、EVALSHA_RO 和 FCALL_RO 的 COMMAND 命令中添加
readonly标志 (#10728) - redis-server 命令行参数现在接受一个带空格的字符串
用于多参数配置 (#10660)
潜在的重大变化
- 在命令行参数中省略配置选项值不再有效 (#10660)
- 从 COMMAND 命令响应中隐藏
may_replicate标志 (#10744)
Redis 7.0 新功能的潜在重大变化
- 协议:分片 pubsub 发布发出
smessage而不是message(#10792) - CLUSTER SHARDS 将槽返回为 RESP 整数,而不是字符串 (#10683)
- 在只读脚本中阻止 PFCOUNT 和 PUBLISH(*_RO 命令和禁止写入)(#10744)
- 声明
no-writes标志的脚本也隐含allow-oom(#10699)
CLI 工具的变化
- redis-cli --bigkeys、–memkeys、–hotkeys、–scan。在 Ctrl+C 之后很好地完成 (#10736)
平台/工具链支持相关改进
- 支持 MacOs 上的 tcp-keepalive 配置间隔 (#10667)
- 支持 Haiku OS 上的 RSS 指标 (#10687)
INFO 字段和自省更改
- 添加用于复制的隔离网络指标。(#10062、#10810)
模块 API 更改
- 为 RM_Call 脚本模式添加两个新检查 (#10786)
- 添加新的 RM_Call 标志让 Redis 自动拒绝
deny-oom命令 (#10786) - 添加模块 API RM_MallocUsableSize (#10795)
- 添加缺少的 REDISMODULE_NOTIFY_NEW (#10688)
- 修复 RedisModuleScanCursor 中的光标类型以处理超过 2^31 个元素 (#10698)
- 修复 RM_Yield 错误和 RM_Call(“EVAL”) OOM 检查错误 (#10786)
- 修复枚举配置中具有重叠位标志的错误 (#10661)
Bug修复
- FLUSHALL 正确重置 rdb_changes_since_last_save INFO 字段 (#10691)
- FLUSHDB 现在传播到副本/AOF,即使 db 为空 (#10691)
- 如果主服务器没有响应,副本失败并重试 PSYNC (#10726)
- 修复 zset_max_listpack_entries 为 0 时 ZRANGESTORE 崩溃 (#10767)
修复了以前版本的 Redis 7.0 中的问题
- CONFIG REWRITE 可能会导致别名配置的配置更改被丢弃 (#10811)
- CONFIG REWRITE 将省略 rename-command 并包含行 (#10761)
注意:使用 Redis 7.0.0 重写其配置文件的受影响用户
应该审查并修复文件。 - 修复 MISCONF (persistence) 错误后损坏的协议 (#10786)
- 修复 --save 命令行回归 (#10690)
- 修复围绕 TLS 配置更改的可能回归。重新加载文件,即使
文件名没有改变。(#10713) - 重新添加 SENTINEL SLAVES 命令,redis 7.0 中缺少 (#10723)
- BZMPOP 被非关键参数解除阻塞并返回它们 (#10764)
- 修复 XADD 和 XTRIM 中可能存在的内存泄漏 (#10753)
==================================================== ===============================
Redis 7.0.0 GA 于 2022 年 4 月 27 日星期三 12:00:00 IST 发布
==================================================== ===============================
升级紧迫性:SECURITY,包含对安全问题的修复。
安全修复:
- (CVE-2022-24736) 攻击者试图加载特制的 Lua 脚本
可能会导致 NULL 指针取消引用,这将导致
redis 服务器进程。此问题影响所有版本的 Redis。
[阿维夫·雅哈夫报道]。 - (CVE-2022-24735) 利用 Lua 脚本执行中的弱点
环境中,可以访问 Redis 的攻击者可以注入 Lua 代码,
以另一个 Redis 用户的(可能更高的)权限执行。
[阿维夫·雅哈夫报道]。
新的功能
- 新键的键空间事件 (#10512)
已扩展的命令回复
- COMMAND DOCS 在命令参数中显示 deprecated_since 字段 (#10545)
- COMMAND DOCS 在适用的情况下显示模块名称 (#10544)
潜在的重大变化
- 副本写入持久性失败时会出现恐慌 (#10504)
- 使用 shebang 防止函数和脚本中的跨槽操作 (#10615)
- 改写了一些关于无效命令或参数的错误响应 (#10612)
- Lua 脚本无法访问 print() 函数 (#10651)
性能和资源利用改进
- 流中的速度优化 (#10574)
- 命令执行管道的速度优化 (#10502)
- listpack 编码排序中的速度优化 (#10486)
- INFO 延迟跟踪的速度优化(与 7.0 RC 相关)(#10606)
- 副本多时的速度优化(与 7.0 RC 相关)(#10588)
新的配置选项
- 允许忽略副本上的磁盘持久性错误 (#10504)
- 当副本无法执行 master 发送的命令时允许 abort with panic (#10504)
- 允许配置 SIGTERM 和 SIGINT 的关闭标志 (#10594)
- 允许将特定于操作系统的标识符附加到 Redis 套接字 (#10349)
模块 API 更改
- 添加参数指定模块日志条目的 ACL 原因 (#10559)
破坏 API 与 7.0 RC 的兼容性 - 在 COMMAND DOCS 的命令参数中添加 deprecated_since 字段 (#10545)
打破与 7.0 RC 的 API/ABI 兼容性 - 添加模块 API 标志以将枚举配置用作位标志 (#10643)
- 添加 RM_PublishMessageShard (#10543)
- 添加 RM_MallocSizeString、RM_MallocSizeDict (#10542)
- 添加 RM_TryAlloc (#10541)
Bug修复
- 副本在 PING 中报告磁盘持久性错误 (#10603)
- 修复了在必须遵守副本和 AOF 时拒绝命令的问题 (#10603)
- appendfsync=always 策略的持久性修复 (#9678)
修复了 Redis 7.0 以前的候选版本中的问题
- 修复 CONFIG REWRITE 可能发生的崩溃 (#10598)
- 修复回归不会因错误而中止事务 (#10612)
- 修复重启后基于 auto-aof-rewrite-percentage 的 AOFRW 触发 (#10550)
- 修复启动后启用 AOF 时的错误,以防第一次重写完成之前失败 (#10616)
- 修复 RM_Yield 模块 API 处理当前客户端未来命令的错误 (#10573)
==================================================== ===============================
Redis 7.0 RC3 于 2022 年 4 月 5 日星期二 12:00:00 IST 发布
==================================================== ===============================
升级紧迫性低:这是 Redis 7.0 的另一个候选版本。
新的功能
新的管理和自省命令和命令参数
- CLUSTER SHARDS 命令弃用 CLUSTER SLOTS (#10293)
潜在的重大变化
- CONFIG GET 响应以不确定的顺序返回。
客户端可能依赖于配置顺序 (#10323) - SORT / SORT_RO 命令拒绝 GET 和 BY 中的键访问模式(如果 ACL)
不授予命令完整的键空间访问权限 (#10340) - 7.0-RC1 中引入的 FUNCTION LOAD 命令已从 ENGINE 中删除,并且
NAME 参数现在是脚本本身的一部分。说明
参数被完全删除 (#10500) - 将 disable-thp 配置设置为不可变 (#10409)
性能和资源利用改进
- 优化副本的性能和内存使用 (#10413)
- 使用 RAND_MAX (#5539) 的 zslRandomLevel 更快、更健壮的代码
CLI 工具的变化
- redis-cli:错误时使用退出代码 1 (#10468)
- redis-cli:在发送 CLUSTER MEET 之前进行 DNS 查找(#10436)
- redis-benchmark:使用 IPv6 修复 --cluster。(#10393)
- redis-cli:更好的 --json Unicode 支持和 --quoted-json (#10286)
INFO 字段和自省更改
- MEMORY STATS:显示 cluster.links 内存使用情况 (#10302)
模块 API 更改
- 用于将模块配置暴露给配置文件和 CONFIG 命令的 API (#10285)
- 添加通知配置更改的事件 (#10311)
- 添加 API 用于从 SLOWLOG 和 MONITOR 编辑命令参数 (#10425)
- RM_Call:脚本模式兼容性、无写入和错误回复的新标志 (#10372)
Bug修复
- Sentinel:修复 auth-pass 更改后没有重新连接的问题 (#10400)
- 集群:修复竞争条件:在 SETSLOT 上变成副本(#10489,#10381)
- XREADGROUP:删除流键时取消阻止客户端 (#10306)
修复了 Redis 7.0 的早期候选版本中的问题
- ACL DRYRUN 不验证已验证的命令参数。(#10405)
- ACL DRYRUN 返回测试的普通权限错误 (#10359)
- 从 nodes.conf 解析主机名信息不正确 (#10435)
- BITSET 和 BITFIELD SET 应该传播,即使只是长度改变 (#10459)
- SHUTDOWN,修复关闭时可能发生的崩溃 (#10440)
- 客户端暂停写入时脚本不应允许可能复制的命令 (#10364)
- 优化跟踪来自 i/o 线程的内存使用情况。(#10401)
- 使用 redis-cli help 或 redis-cli 时初始化帮助?(#10382)
- 关闭客户端输出缓冲区的 COW,因为它是动态的 (#10371)
- 修复 EVAL 在处理前失败时的内存损坏 (#10519)
==================================================== ===============================
Redis 7.0 RC2 于 2022 年 2 月 28 日星期一 12:00:00 发布
==================================================== ===============================
升级紧迫性低:这是 Redis 7.0 的另一个候选版本。
新的功能
- 添加流消费者组滞后跟踪和报告 (#9127)
- 为函数和评估 Lua 脚本添加 API 以显式检查 ACL (#10220)
新的用户命令或命令参数
- COMMAND GETKEYSANDFLAGS 子命令 (#10237)
- INFO 命令可以接受多个部分参数 (#6891)
- XGROUP CREATE 和 SETID:新的 ENTRIESREAD 可选参数 (#9127)
- XSETID 新的 ENTRIESADDED 和 MAXDELETEDID 可选参数 (#9127)
已扩展的命令回复
- XINFO 报告消费者组滞后和其他一些字段 (#9127)
- XAUTOCLAIM 返回一个带有删除 ID 列表的新元素 (#10227)
潜在的重大变化
- X[AUTO]CLAIM 跳过删除的条目而不是回复 Nil,并删除
它们来自待处理条目列表 (#10227) - 修复从 EVAL 脚本返回的错误代码 (#10218, #10329)
- COMMAND INFO,将 key-spec “CHANNEL” 标志重命名为 “NOT_KEY” (#10299)
性能和资源利用改进
- 减少客户端回复的系统调用和小数据包 (#9934)
- 减少陈旧客户端的内存使用 (#9822)
- 修复 Redis 6.2 中引入的 Z[REV]RANGE 命令(按等级)中的回归(#10337)
CLI 工具的变化
- 为 Multi Part AOF 适配 redis-check-aof 工具 (#10061)
- 启用 redis-benchmark 以使用 RESP3 协议模式 (#10335)
平台/工具链支持相关改进
- 修复 OpenSSL 3.0.x 相关问题 (#10291)
INFO 字段和自省更改
- COMMAND INFO key-specs 有新的 variable_flags 标志 (#10237, #10148)
- INFO stats: 添加 aof_rewrites 和 rdb_snapshots 计数器 (#10178)
- 信息统计:添加 reply_buffer_shrinks 和 reply_buffer_expends (#9822)
- INFO 模块:添加 no-implicit-signal-modified 模块选项 (#10284)
模块 API 更改
- 添加 RM_SetCommandInfo API 为新的 COMMAND 设置命令元数据
自省功能和 ACL 密钥权限 (#10108) - 添加 RM_KeyAtPosWithFlags 和 RM_GetCommandKeysWithFlags API (#10237)
- 添加 getchannels-api 命令标志和 RM_IsChannelsPositionRequest,
RM_ChannelAtPosWithFlags API (#10299) - 更改 RM_ACLCheckChannelPermissions 和 RM_ACLCheckKeyPermissions API
(在 RC1 中发布)采用不同的标志 (#10299) - 修复 RM_SetModuleOptions 标志冲突。7.0 RC1 头文件、模块中的错误
使用 OPTIONS_HANDLE_REPL_ASYNC_LOAD 会搞乱密钥失效 (#10284)
Bug修复
- 模块:修复模块线程添加错误回复时的线程安全违规,
在 6.2 中损坏 (#10278) - Lua:修复 Eval 脚本活动碎片整理,RC1 中损坏的 7.0 (#10271)
- 修复地理搜索边界框检查导致丢失结果 (#10018)
- Lua:在评估 Lua 脚本时添加对 min-slave-* 配置的检查和
函数 (#10160) - 模块:在模块上使用 MODULE UNLOAD 时防止崩溃和内存泄漏
带有挂起的计时器 (#10187) - 修复被阻止客户端的错误统计信息和失败的命令统计信息 (#10309)
- Lua/Modules:修复脚本和模块丢失和重复的错误统计信息(#10329,#10278)
- 在集群设置时检查目标节点是主节点 (#10277)
- 修复在逻辑过期键上使用键删除不会使 WATCH 无效 (#10256)
- Sentinel:如果配置保存失败返回错误 (#10151)
- Sentinel:修复重新注册 Sentinel 的使用后免费问题 (#10333)
==================================================== ===============================
Redis 7.0 RC1 于 2022 年 1 月 31 日星期一 12:00:00 发布
==================================================== ===============================
升级紧迫性 LOW:这是 Redis 7.0 的第一个候选版本。
Redis Release Candidate (RC) 版本是可用的早期版本
供社区中的早期采用者对其进行测试。我们不考虑
它们适用于生产环境。
Redis 7.0 版本介绍
Redis 7.0 包括几个新的面向用户的特性,显着的性能
优化和许多其他改进。它还包括以下更改
可能会破坏与旧版本的向后兼容性。我们敦促用户
在升级之前仔细查看发行说明。
特别是,用户应注意以下更改:
1、Redis 7将AOF作为多个文件存储在一个文件夹中;请参阅下面的多部分 AOF。
2、Redis 7对RDB文件使用了新的10版格式,不兼容
与旧版本。
3. Redis 7 在加载时即时将 ziplist 编码的密钥转换为 listpacks
较旧的 RDB 格式。转换适用于从磁盘加载文件或
从 Redis 主服务器复制,会稍微增加加载时间。
4. 请参阅下面提到的有关重大更改的部分。
以下是此版本与 6.2.6 相比的完整更改列表。
每个都包含添加它的 PR 编号,以便您获得更多详细信息
在 https://github.com/redis/redis/pull/<数字>
新的功能
- Redis 函数:使用服务器端脚本扩展 Redis 的新方法 (#8693)
见 https://redis.io/topics/functions-intro - ACL:细粒度的基于密钥的权限,允许用户支持多个
带有选择器的命令规则集 (#9974)
请参阅 https://redis.io/topics/acl#key-permissions 和 https://redis.io/topics/acl#selectors。 - 集群:分片(特定于节点)发布/订阅支持 (#8621)
见 https://redis.io/topics/pubsub#sharded-pubsub - 在大多数情况下对子命令的一流处理(影响 ACL
类别、INFO 命令统计等)(#9504、#10147) - 命令元数据和文档 (#10104)
见 https://redis.io/commands/command-docs, https://redis.io/topics/command-tips - 命令键规格。一种更好的方式让客户找到关键论点及其
读/写目的(#8324、#10122、#10167)
见 https://redis.io/topics/key-specs - 多部分 AOF 机制避免 AOF 重写开销 (#9788)
- 集群:支持主机名,而不仅仅是 IP 地址 (#9530)
- 改进了对网络缓冲区消耗的内存的管理,以及一个选项
当总内存超过限制时删除客户端 (#8687) - Cluster:一种断开集群总线连接的机制,以防止
不受控制的缓冲区增长 (#9774) - AOF:时间戳注释和对时间点恢复的支持 (#9326)
- Lua:支持 EVAL 脚本中的函数标志 (#10126)
见 https://redis.io/topics/eval-intro#eval-flags - Lua: 支持 Verbatim 和 Big-Number 类型的 RESP3 回复 (#9202)
- Lua: 通过 redis.REDIS_VERSION, redis.REDIS_VERSION_NUM (#10066) 获取 Redis 版本
新的用户命令或命令参数
- ZMPOP、BZMPOP 命令 (#9484)
- LMPOP, BLMPOP 命令 (#9373)
- SINTERCARD, ZINTERCARD 命令 (#8946, #9425)
- SPUBLISH、SSUBSCRIBE、SUNSUBSCRIBE、PUBSUB SHARDCHANNELS/SHARDNUMSUB (#8621)
- EXPIRETIME 和 PEXPIRETIME 命令 (#8474)
- EXPIRE 命令组支持 NX/XX/GT/LT 选项 (#2795)
- SET 命令支持组合 NX 和 GET 标志 (#8906)
- BITPOS, BITCOUNT 接受 BIT 索引 (#9324)
- EVAL_RO,EVALSHA_RO 命令变体,在只读副本上运行 (#8820)
- SORT_RO 命令,在只读副本上运行 (#9299)
- SHUTDOWN 参数:NOW、FORCE、ABORT (#9872)
- 功能 *,FCALL,FCALL_RO - https://redis.io/commands/function-load
- CONFIG SET/GET 可以在一次调用中自动处理多个配置 (#9748, #9914)
- QUIT 提升为正确命令,HOST: 和 POST 降级 (#9798)
- XADD 通过
-* 支持自动序列号 (#9217)
新的管理和自省命令和命令参数
- 命令文档(#9656、#10056、#10104)
- 命令列表 (#9504)
- COMMAND INFO 接受子命令作为 args,也没有 args (#9504, #10056)
- 延迟直方图 (#9462)
- 集群链接 (#9774)
- 集群 DELSLOTSRANGE 和集群 ADDSLOTSRANGE (#9445)
- 客户无驱逐 (#8687)
- ACL DRYRUN (#9974)
- SLOWLOG GET 支持传入 -1 获取所有条目 (#9018)
已扩展的命令回复
- COMMAND 和 COMMAND INFO 扩展了提示、关键规格和子命令
见 https://redis.io/commands/command - ACL CAT、COMMAND LIST 列出子命令 (#10127)
- MODULE LIST 回复包含路径和参数 (#4848)
- OBJECT ENCODING 返回 listpack 而不是 ziplist (#8887, #9366)
- 集群插槽主机名支持 (#9530)
- COMMAND 命令:添加了
blocking和module标志 (#10104, #9656)
潜在的重大变化
- 将绑定参数修改为非默认值将不再隐式
禁用保护模式 (#9034) - 删除 EVAL 脚本逐字复制、传播和确定性
执行逻辑 (#9812)
自 Redis 6 以来,默认情况下已弃用和关闭此功能,并且不再是
支持的。 - ACL:发布/订阅频道默认被阻止 (acl-pubsub-default=resetchannels) (#10181)
- SCRIPT LOAD 和 SCRIPT FLUSH 不再传播到副本/AOF (#9812)
- ACL:在启动文件和命令行中声明重复的ACL用户
参数将导致错误,而之前的最后一个声明
会覆盖其他的。(#9330) - 复制:TTL 总是以绝对(非相对)毫秒的形式复制
时间戳 (#8474) - 修复了在可写副本上处理具有过期键的多键命令 (#9572)
- CONFIG SET maxmemory 在开始驱逐之前返回 (#10019)
- AOF:新的Multi-Part机制将数据作为一组多个文件存储在一个
指定文件夹 (#9788) - 删除 STRALGO 命令,保留 LCS 一个仅适用于的独立命令
键 (#9799) - 移除 gopher 协议支持 (#9057)
- MODULE 和 DEBUG 命令默认禁用(受保护),以提高安全性 (#9920)
- 现在在 MULTI/EXEC 事务中创建快照和其他管理命令
被拒绝 (#10015) - 当replica-serve-stale-data=no 时,PING 现在被 -MASTERDOWN 拒绝 (#9757)
- ACL GETUSER 回复现在对
keys和channels使用 ACL 语法 (#9974) - 命令回复删除
random和sort-for-scripts标志,它们现在是一部分
命令提示 (#10104) - 对不存在的列表进行计数的 LPOP/RPOP 返回空数组 (#10095)
- INFO commandstats 现在显示每个子命令的统计信息 (#9504)
- ZPOPMIN/ZPOPMAX 用于在非 zset 计数为 0 时产生错误回复 (#9711)
- LPOP/RPOP 用于在 count 为 0 时产生错误回复 (#9692)
- CONFIG GET 绑定现在返回有效的当前值,即使隐式
默认使用中 (#9034) - CONFIG REWRITE 现在重写要加载的模块列表 (#4848)
- 配置:repl-diskless-sync 现在默认设置为 yes (#10092)
- 关闭时,Redis 可以选择等待副本赶上
复制链接 (#9872) - 现在加载期间允许大多数 CONFIG SET、REWRITE、RESETSTAT 命令 (#9878)
- 现在在加载和陈旧时允许使用 READONLY 和 READWRITE 命令
副本 (#7425) - 修复 SELECT、WAIT、ROLE、LASTSAVE、READONLY、READWRITE、ASKING 的 ACL 类别 (#9208)
- 现在即使在未经身份验证的连接上也允许重置 (#9798)
- 现在允许在陈旧的副本上加载脚本 (#10126)
安全改进
- 默认情况下阻止(保护)敏感配置和命令 (#9920)
- 改进绑定和保护模式配置处理 (#9034)
- Sentinel:避免记录 auth-pass 值 (#9652)
- redis-cli: 敏感命令绕过历史文件 (#8895)
性能和资源利用改进
- 集群模式下显着的内存节省和延迟改进 (#9356)
- 在许多散列或 zset 键的情况下显着节省内存 (#9228)
- 复制积压和副本使用一个全局共享复制缓冲区 (#9166)
- 显着减少写时复制内存开销 (#8974)
- 释放集群发送缓冲区中未使用的容量 (#9255)
- 内存效率,充分利用客户端结构内存作为回复缓冲区 (#8968)
- 将 ziplist 替换为 Hash, List, Zset 中的 listpack (#8887, #9366, #9740)
- 添加对列表类型的支持以存储大于 4GB 的元素 (#9357)
- 按模块重用被阻塞客户端的临时客户端对象 (#9940)
- 移除命令参数计数限制,动态增加 argv 缓冲区 (#9528)
- 优化列表类型操作,从最近的一端寻找 (#9454)
- 改进 fsync 以避免大量写入磁盘 (#9409)
- BITSET 和 BITFIELD SET 仅在值实际更改时传播 (#9403)
- 改善客户端被模块定时器解除阻塞时的延迟 (#9593)
其他一般改进
- 主重启后可以进行部分同步 (#8015)
- redis从空启动时总是创建一个基础AOF文件(#10102)
- 副本在 repl-diskless-load=swapdb 期间继续提供数据以获得更好的
可用性 (#9323)
CLI 工具的变化
- redis-cli --json 和 -2 选项 (#9954)
- redis-cli --scan, 添加睡眠间隔选项 (#3751)
- redis-cli --replica 优化,跳过 RDB 生成 (#10044)
- redis-cli --functions-rdb,仅生成带函数的 RDB (#9968)
- redis-cli -X,从标准输入中获取任意参数,扩展 --cluster call take -x (#9980)
- redis-benchmark -x 从标准输入中获取参数 (#9130)
- redis-benchmark,添加 URI 支持 (#9314)
- redis-cli monitor 和 pubsub 可以使用 Ctrl+C 中止,保持 cli 活动 (#9347)
平台/工具链支持相关改进
- 升级 jemalloc 5.2.1 (#9623)
- 修复 NetBSD 和 OpenBSD 上的 RSS 指标 (#10116, #10149)
- 检查 macOS、FreeBSD 和 OpenBSD 上的 somaxconn 系统设置 (#9972)
- 在 MacOS 上更好的 fsync,提高断电安全性 (#9545)
新的配置选项
- CONFIG SET/GET 可以在一次调用中处理多个配置 (#9748, #9914)
- 支持配置包含文件的 glob 模式匹配 (#8980)
- appenddirname,存储多部分 AOF 文件的文件夹 (#9788)
- 关机超时,默认 10 秒 (#9872)
- maxmemory-clients,允许限制所有客户端的总内存使用量 (#8687)
- cluster-port,可以控制集群总线的绑定端口(#9389)
- bind-source-addr,配置参数控制传出连接的IP(#9142)
- busy-reply-threshold,旧 lua-time-limit 的别名 (#9963)
- repl-diskless-sync-max-replicas,在某些情况下允许更快的复制 (#10092)
- 延迟跟踪,默认启用,延迟跟踪信息百分位数 (#9462)
- cluster-announce-hostname 和 cluster-preferred-endpoint-type (#9530)
- cluster-allow-pubsubshard-when-down (#8621)
- cluster-link-sendbuf-limit (#9774)
- list-max-listpack-, hash-max-listpack-, zset-max-listpack-* 作为别名
旧的 ziplist 配置 (#8887, #9366, #9740)
INFO 字段和自省更改
- 信息:latencystats 部分 (#9462)
- 信息:total_active_defrag_time 和 current_active_defrag_time (#9377)
- 信息:total_eviction_exceeded_time 和 current_eviction_exceeded_time (#9031)
- 信息:evicted_clients (#8687)
- 信息:mem_cluster_links,total_cluster_links_buffer_limit_exceeded (#9774)
- 信息:current_cow_peak (#8974)
- 信息:删除 aof_rewrite_buffer_length (#9788)
- MEMORY STATS:在集群模式下报告槽到键映射大小 (#10017)
- INFO MEMORY:更改函数和 EVAL 的单独内存使用 (#9780)
- INFO MEMORY:添加mem_total_replication_buffers,改变含义
mem_clients_slaves (#9166) - 客户列表:tot-mem、multi-mem (#8687)
- CLIENT LIST, INFO: 显示 RESP 版本 (#9508)
- 哨兵信息:tilt_mode_since (#9000)
- LATENCY:跟踪模块获取 GIL 延迟 (#9608)
模块 API 更改
- 添加回复 RESP3 类型的 API (#8521, #9639, #9632)
- 添加用于解析来自 RM_Call 的 RESP3 回复的 API (#9202)
- 添加 RM_Call ‘0’ 和 ‘3’ 标志来控制要使用的 RESP 版本 (#9202)
- 添加对显式验证 ACL 的支持 (#9309, #9974)
- 添加缺少的列表类型功能 API (#8439)
- 添加 API 以在长时间繁忙的作业中让出 Redis 事件 (#9963)
- 添加用于向 Redis 事件循环注册其他文件描述符的 API (#10001)
- 增强 mem_usage/free_effort/unlink/copy 和 IO 回调以具有键名
和数据库索引 (#8999) - 增强 mem_usage 回调以获取请求的样本大小 (#9612)
- RM_GetContextFlags: CTX_FLAGS_ASYNC_LOADING, CTX_FLAGS_RESP3 (#9323, #9202)
- 将 API 标记为非实验性 (#9983)
- RM_CreateSubcommand (#9504)
- RM_KeyExists (#9600)
- RM_TrimStringAllocation (#9540)
- RM_LoadDataTypeFromStringEncv (#9537)
- RM_MonotonicMicroseconds (#10101)
- 添加 ReplAsyncLoad 事件并弃用 ReplBackup 事件 (#9323)
- 添加 RM_SetModuleOptions OPTIONS_HANDLE_REPL_ASYNC_LOAD 标志 (#9323)
Bug修复
- 修复没有键的 EVAL 上的 COMMAND GETKEYS (#9733)
- 通过分配器开销改善内存使用 (#9095)
- 在手动故障转移结束后取消暂停客户端,而不是等待定时 (#9676)
- Lua:修复带有许多参数的脚本调用崩溃,v6.2.6 中的回归(#9809)
- Lua:使用所有字符计算字符串哈希以防止哈希冲突(#9449)
- 防止 LCS 通过 proto-max-bulk-len 分配临时内存 (#9817)
- 跟踪:总是在命令回复后发出无效消息 (#9422)
- 集群:从 CLUSTER SLOTS 响应中隐藏空副本 (#9287)
- CLIENT KILL 在 ID 为 0 时杀死所有客户端 (#9853)
- 使用 list-compress-depth 修复列表周围的错误 (#9849, #9779)
- 修复 RESTORE、RDB 加载和模块 API 中的一个蓝月亮 LRU 错误 (#9279)
- 使用 RESETSTAT 重置lazyfreed_objects 信息字段,测试流lazyfree (#8934)
- 修复 RDB 和列表节点压缩以处理大于 4GB 的值 (#9776)
- 修复将大于 2GB 的元素添加到 Set 或 Hash 时的崩溃 (#9916)
- 无盘复制不能算作更改并跳过下一个数据库 SAVE (#9323)
- 修复由于溢出导致的过度流修剪 (#10068)
- 加载时接收 SIGTERM 时安全有序的退出 (#10003)
- 改进 EXPIRE TTL 溢出检测 (#9839)
- 为 INFO 错误统计添加错过的错误计数 (#9646)
- DECRBY LLONG_MIN 导致否定溢出 (#9577)
- 完全同步时延迟丢弃缓存的 master (#9398)
- 修复消费者中的流键空间通知和持久性触发器
创建和删除 (#9263) - 修复 zset 中超过 2B 条目的排名溢出 (#9249)
- 如果只有文件夹,请避免以 check-aof / check-rdb / sentinel 模式启动
name 包含该名称 (#9215, #9176) - 只有在解析完整个配置文件后才创建日志文件 (#6741)
- redis-cli: 修复 --bigkeys、–memkeys、–hotkeys 的 SCAN 睡眠间隔 (#9624)
- redis-cli:修复提示以显示正确的数据库编号和事务状态
重置 (#9096) - 模块 API:修复可能的传播错误,以防模块调用 CONFIG SET
命令外的 maxmemory (#10019, #9890) - 模块 API:将客户端 RESP 版本传递给模块被阻止的客户端 (#9634)
- 模块 API:释放在集群重分片中被模块命令阻塞的客户端
和向下状态 (#9483) - Sentinel:修复主重启后的可用性(#9438)
- Sentinel:使用 TLS 修复内存泄漏 (#9753)
- Sentinel:修复由于重复的零端口可能导致的故障转移 (#9240)
- Sentinel:修复主机名支持问题 (#10146)
- Sentinel:修复某些容器环境中的选举失败(#10197)
感谢所有使此版本成为可能的用户和开发人员。
我们将跟进更多 RC 版本,直到代码看起来可以生产
我们有一段时间没有收到关于严重问题的报告。
Redis 7.0下载:https://redis.io/download/
文章来源:https://raw.githubusercontent.com/redis/redis/7.0/00-RELEASENOTES




