加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
发行说明.txt 15.90 KB
一键复制 编辑 原始数据 按行查看 历史
凌康 提交于 2022-02-12 22:26 . redis-7.0-rc1,最终测试版本v7.0-rc1
==================================================== ===============================
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 通过 <ms>-* 支持自动序列号 (#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-pubsublocal-when-down (#8621)
* cluster-link-sendbuf-limit (#9774)
* list-max-listpack-*, hash-max-listpack-*, zset-max-listpack-* 作为别名
旧的 ziplist 配置 (#8887, #9366, #9740)
INFO 字段和自省更改
======================================
* 信息:latencystats 部分 (#9462)
* 信息:t​​otal_active_defrag_time 和 current_active_defrag_time (#9377)
* 信息:t​​otal_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)
已知的问题
=============
这是影响此版本的已知问题列表,并计划在
在 Redis 7 正式发布之前修复或完成:
* 用于提供额外命令元数据的模块的模块 API 仍然是
失踪。
* 支持新 ACL 选择器的模块 API 仍然缺失。
* ACL 键访问选择器还不适用于带有 GET/BY 的 SORT。
* redis-check-aof 中的多部分 AOF 支持仍然缺失。
感谢所有使此版本成为可能的用户和开发人员。
我们将跟进更多 RC 版本,直到代码看起来可以生产
我们有一段时间没有收到关于严重问题的报告。
特别感谢您为此版本所做的大量工作:
- 盖伊·贝诺什
- 梅尔·施皮莱恩
- 奥兰阿格拉
- 陈扬
——朱彬彬
- 约夫·斯坦伯格
- 顺德
——玛德琳·奥尔森
——约西·戈特利布
- 维克多·索德奎斯特
——王源
- 哈克里希恩帕特罗
- Ozan Tezcan
——文辉
——黄柱
- 南燕
- 菲利普奥利维拉
- 爱德华多·森普雷邦
- 雅科夫·哈赞
- 伊塔马尔·哈伯
——赵赵
- 伊泰佩里
- 宁孙
- 诸葛济
- 门文
- 安迪潘
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化