Redis 7.2 发行说明
升级紧急程度:
低:除非您想使用新功能,否则无需升级。
中等:计划对服务器进行升级,但并不紧急。
高:存在可能影响部分用户的严重错误。升级!
严重:存在一个影响大多数用户的严重错误。尽快升级。
安全性:该版本中有安全修复程序。
=================================================== ================================
Redis 7.2.3 于 2023 年 11 月 1 日星期三 12:00:00 IST 发布
=================================================== ================================
升级紧迫性:高,修复了影响大多数用户的严重错误。
Bug修复
- 修复文件描述符泄漏,防止已删除的文件释放磁盘空间
副本 (#12693) - 修复集群节点删除后可能出现的崩溃问题 (#12702)
=================================================== ================================
Redis 7.2.2 于 2023 年 10 月 18 日星期三 10:33:40 IDT 发布
=================================================== ================================
升级紧迫性 安全性:请参阅下面的安全修复程序。
安全修复
- (CVE-2023-45145) Listen(2) 和 chmod(2) 调用的错误顺序会创建
另一个进程可以使用竞争条件来绕过所需的 Unix
启动时的套接字权限。
平台/工具链支持相关变更
- 修复 MacOS 13 上的编译错误 (#12611)
Bug修复
- 如果新的 AOF 被写入,WAITAOF 在没有写入流量的情况下可能会超时
创建后 AOF 重写无法立即开始 (#12620)
Redis集群
- 修复在 7.0 和 7.2 混合集群中运行重新平衡命令时崩溃的问题
节点 (#12604) - 修复集群分片槽号的返回类型为整数,即
使其与过去的行为一致 (#12561) - 修复从模块或脚本调用 CLUSTER 命令以返回 TLS 信息的问题
适当地(#12569)
CLI 工具的变化
- redis-cli,修复在订阅模式下重新连接时崩溃的问题 (#12571)
模块 API 更改
- 修复下一个计时器事件的溢出计算 (#12474)
=================================================== ================================
Redis 7.2.1 于 2023 年 9 月 6 日星期三 15:00:00 IDT 发布
=================================================== ================================
升级紧迫性 安全性:请参阅下面的安全修复程序。
安全修复
- (CVE-2023-41053) Redis 无法正确识别 SORT_RO 访问的键,并且,
因此,可能会授予执行此命令的用户访问不属于该命令的密钥的权限
由 ACL 配置明确授权。
Bug修复
- 修复将节点加入现有 7.0 Redis 集群时的崩溃问题 (#12538)
- 修正某些管理员的request_policy和response_policy命令提示/
配置命令(#12545、#12530)
=================================================== ================================
Redis 7.2.0 GA 于 2023 年 8 月 15 日星期二 12:00:00 IDT 发布
=================================================== ================================
升级紧迫性低:这是 Redis 7.2 的第一个稳定版本。
Bug修复
- 集群模式下的 redis-cli 处理
unknown-endpoint
(#12273) - 更新一些命令的请求/响应策略提示 (#12417)
- 确保在从 RDB/AOF 加载期间以及在副本上禁用函数加载超时。(#12451)
- 修复错误成功和带有错误括号组合的 ACL 选择器的内存泄漏 (#12452)
- 修复在向客户端发出阻止信号后发生脚本超时时的断言 (#12459)
修复了 Redis 7.2 早期版本中的问题
- 正确更新 MONITOR 客户端的内存以获取 INFO 和客户端驱逐 (#12420)
- 集群节点的响应在没有时不必要地添加额外的逗号
主机名存在。(#12411)
=================================================== ================================
Redis 7.2 RC3 于 2023 年 7 月 10 日星期一 12:00:00 IDT 发布
=================================================== ================================
升级紧迫性低:这是 Redis 7.2 的第三个候选版本。
升级紧迫性 安全性:如果您使用的是 7.2 的早期候选版本。
安全修复:
- (CVE-2022-24834) 在 Redis 中执行的特制 Lua 脚本可以触发
cjson 和 cmsgpack 库中的堆溢出,并导致堆
损坏和潜在的远程代码执行。问题全都存在
支持 Lua 脚本的 Redis 版本,从 2.6 开始,并影响
仅经过身份验证和授权的用户。 - (CVE-2023-36824) 从命令和参数列表中提取键名称
在某些情况下,可能会触发堆溢出并导致读取随机堆
内存、堆损坏和潜在的远程代码执行。具体来说:
使用 COMMAND GETKEYS* 并验证 ACL 规则中的键名称。
新功能
新的管理和内省命令以及命令参数
- 使 SENTINEL CONFIG [SET|GET] 变量成为变量。(#10362)
潜在的破坏/行为改变
- 集群 SHARD ID 在集群节点输出中不再可见,
在 7.2-RC1 中引入。(#10536,#12166) - 当使用也订阅同一频道的 RESP3 客户端调用 PUBLISH 时,
顺序发生变化,回复在发布消息之前发送 (#12326)
新的配置选项
- 添加新的日志级别“nothing”以禁用日志记录 (#12133)
- 添加 cluster-announce- human-nodename - 节点的唯一标识符
在日志中用于调试 (#9564)
其他一般改进
- 加载期间允许 CLUSTER SLOTS / ShardS 命令 (#12269)
- 在未启用“tls-cluster”时支持 TLS 服务并保持纯文本
和 Nodes.conf 中的 TLS 端口 (#12233) - 更新 SPOP 和 RESTORE 命令以将取消链接命令复制到副本
当服务器配置为使用异步服务器删除时 (#12320) - 尝试在 ZUNION / ZINTER / ZDIFF 中惰性释放临时 zset (#12229)
性能和资源利用率的改进
- 将 PSUBSCRIBE 和 PUNSUBSCRIBE 从 O(N*M) 优化为 O(N) (#12298)
- 优化 SCAN、SSCAN、HSCAN、ZSCAN 命令 (#12209)
- 设置 Jemalloc --disable-cache-oblivious 来减少内存开销 (#12315)
- 优化 ZINTERCARD 以避免创建临时 zset (#12229)
- 优化 HRANDFIELD 和 ZRANDMEMBER 列表包编码 (#12205)
- 许多其他优化(#12155、#12082、#11626、#11944、#12316、#12250、
#12177, #12185)
CLI 工具的变化
- redis-cli:处理包含 NaN 的 RESP3 双重响应 (#12254)
- redis-cli:支持 IPv6 的 URI (#11834)
模块 API 更改
- 将新的 (v7.2 RC2) RM_ReplyWithErrorFormat 与 RM_ReplyWithError 的语义对齐。
这是一个重大更改,会影响生成的错误代码。(#12321) - 禁止加载和只读副本上的 RM_AddPostNotificationJob (#12304)
- 添加模块命令过滤器的功能,以了解正在处理哪个客户端 (#12219)
Bug修复
- 修复当 RESP3 时在 MULTI 内使用 PUBLISH 时损坏的协议
发布客户端也订阅了该频道 (#12326) - 修复 WAIT 在被阻止的模块命令被解除阻止后生效 (#12220)
- 在存在分叉子项时重新启用小规模重新哈希 (#12276)
- 修复与
<count>
一起使用时 HRANDFIELD、SRANDMEMBER、ZRANDMEMBER 中可能出现的挂起问题 (#12276) - 改善 RANDOMKEY、HRANDFIELD、SRANDMEMBER、ZRANDMEMBER、SPOP 和驱逐中的公平性问题 (#12276)
- 集群:修复了槽迁移可能会在后续故障转移或节点加入时恢复的竞争条件 (#12344)
修复了 Redis 7.2 早期版本中的问题
- 修复带有“>”的 XREADGROUP BLOCK 挂起的问题 (#12301)
- 修复重新处理时被阻止的命令被拒绝时的断言。(#12247)
- 修复了阻塞 RM_Call 上空闲后的使用。(#12342)
=================================================== ================================
Redis 7.2 RC2 于 2023 年 5 月 15 日星期一 12:00:00 发布
=================================================== ================================
升级紧迫性低:这是 Redis 7.2 的第二个候选版本。
INFO 字段和内省变化
- 添加一些低级事件循环指标以帮助诊断延迟 (#11963)
性能和资源利用率的改进
- 对 SADD 和 HSET 进行了小幅性能改进 (#12019)
平台/工具链支持相关变更
- 升级到 Jemalloc 5.3.0,解决了罕见的 fork child 挂起问题 (#12115)
- 修复与链接时间优化一起使用时编译器强化引起的崩溃 (#11982)
- 修复本地客户端检测,127...* 而不是 127.0.0.1 (#11664)
- 在关闭时向 systemd 报告 AOF 失败状态 (#12065)
CLI 工具的变化
- redis-cli:根据实际命令arg文档重新实现和改进帮助提示(#10515)
- redis-cli:添加选项 --count 用于调整基于 SCAN 的功能 (#12042)
- redis-benchmark:添加 --seed 选项来为随机数生成器提供种子 (#11945)
模块 API 更改
- 添加 RM_RdbLoad 和 RM_RdbSave API (#11852)
- 添加 RM_ReplyWithErrorFormat 支持格式字符串 (#11923)
- 修复:RM_ZsetAdd、RM_ZsetIncrby、RM_StreamAdd 失败时删除空键 (#12129)
Bug修复
- RANK 设置为 LONG_MIN 的 LPOS 返回错误结果 (#12167)
- 在极少数情况下,避免主重启后不必要的完全同步(#12088)
- 在处理后台事务时公平地迭代客户端 (#12025)
- 从客户端读取大数据时避免错误地缩小查询缓冲区 (#12000)
- Sentinel:修复使用旧的已知从站时的配置重写错误(#11775)
- ACL:撤销所有频道权限时断开 pub-sub 订阅者的连接 (#11992)
- 在极少数情况下添加 AOF 文件缺失的 fsync (#11973)
修复了 Redis 7.2 早期版本中的问题
- 修复 MULTI、EVAL、WAIT 和模块的命令持续时间指标的跟踪 (#11970)
=================================================== ================================
Redis 7.2 RC1 于 3 月 22 日星期三 12:00:00 IST 2023 发布
=================================================== ================================
升级紧迫性低:这是 Redis 7.2 的第一个候选版本。
Redis 候选发布 (RC) 版本是可用的早期版本
供社区中的早期采用者对其进行测试。我们不考虑
它们适合生产环境。
Redis 7.2 版本简介
Redis 7.2 包括优化、一些新命令、一些改进、
错误修复以及几个新的模块 API。
用户尤其应注意以下更改:
1.Redis 7.2对RDB文件使用新格式(版本11),不兼容
与旧版本。
2. 请参阅下面提到的有关重大更改的部分。
3. 如果您使用模块,请参阅下面的模块 API 重大更改部分。
以下是此版本与 7.0.10 相比的更改的完整列表。
每一个都包含添加它的 PR 编号,以便您获得更多详细信息
在 https://github.com/redis/redis/pull/
新功能
- 引入WAITAOF命令,阻止客户端直到指定数量
的 Redises 已将之前的所有写入命令同步到磁盘上的 AOF,
参见 https://redis.io/commands/waitaof/
新用户命令或命令参数
- WAITAOF 会阻塞,直到写入已同步到磁盘 (#11713)
- 将WITHSCORE 选项添加到ZRANK 和ZREVRANK (#11235)
新的管理和内省命令以及命令参数
- CLIENT SETINFO 让客户端库报告 Redis 名称和版本 (#11758)
- CLIENT NO-TOUCH 使客户端可以在不影响键的 LRU/LFU 的情况下运行命令 (#11483)
- 引入Shard ID,对集群模式下的节点进行逻辑分组
复制。分片 ID 是自动分配的并且通过以下方式可见
“米斯哈德集群”。(#10536)
已扩展的命令回复
- ACL LOG - 添加条目 ID、创建的时间戳和上次更新的时间戳 (#11477)
- 命令文档 - 将参数名称重新用作唯一 ID (#11051)
- CLIENT LIST 有
T
标志来指示 CLIENT NO-TOUCH (#11483) - 客户端列表显示库名称、库版本 (#11758)
潜在的破坏/行为改变
- 脚本的客户端跟踪现在跟踪由
脚本而不是 EVAL / FCALL 调用者声明的键 (#11770) - 在命令执行和脚本中冻结时间采样 (#10300)
- 解除阻塞命令时,会进行 ACL、OOM 等检查
重新评估(#11012) - 统一 ACL 失败错误消息文本和错误代码 (#11160)
- 当key不再存在时释放的阻塞流命令带有
不同的错误代码 (#11012) - 仅当/如果命令被阻止时,命令统计信息才会更新
实际执行 (#11012) - ACL用户内部存储方式不再去除冗余命令
和类别规则,这可能会改变这些规则作为一部分的显示方式
ACL SAVE
、ACL GETUSER
和ACL LIST
(#11224) - 如果可能的话,为基于 TLS 的复制创建的客户端连接使用 SNI (#11458)
- 流消费者:重新调整观看时间的用途,添加活动时间 (#11099)
- XREADGROUP 和 X[AUTO]CLAIM 创建消费者,无论它是否是
能够执行一些阅读/声明(#11099) - ACL 默认新创建的用户在 ACL LIST/GETUSER 中设置 sanitize-payload 标志 #11279
- 修复 HELLO 命令,除非成功,否则不会影响客户端状态 (#11659)
- 在对单个 nan 类型的回复中规范化“NAN”,就像我们对“inf”所做的那样(#11597)
弃用
- 将 QUIT 命令标记为已弃用 (#11439)
- 删除预发布 RDB 格式的 RDB 加载代码 (#11058)
性能和资源利用率的改进
- 小列表类型键的显着内存优化(#11303)
- 针对小型集合类型键的显着内存优化 (#11290)
- 针对大型集合的显着内存优化 (#11595)
- 在整数分数的情况下,ZRANGE 回复带有分数的显着速度优化 (#11779)
- 双重回复的显着速度优化,主要是排序集命令 (#10587)
- 优化集群模式下多键命令的性能 (#11044)
- 增量回收 RDB 文件的操作系统页面缓存 (#11248)
- 改进存在大量待处理消息时集群总线链路的内存管理 (#11343)
- 使用不带管道的命令的工作负载的性能略有提高 (#11220)
CLI 工具的变化
- redis-cli 接受订阅模式下的命令 (#11873)
其他一般改进
- WAIT 现在不再等待最后一个命令之后的复制偏移量,
而是上次写入后的复制偏移量 (#11713) - 当节点删除时自动传播到集群中的其他节点
调用“CLUSTER FORGET”,允许通过一次调用删除节点
在大多数情况下(#10869) - 脚本中不允许的阻止命令现在可以在脚本中执行
他们在 MULTI 中也做了同样的事情 (#11568)
平台/工具链支持相关变更
- 32 位版本编译时没有 HAVE_MALLOC_SIZE(不是 jemalloc 或 glibc)
会消耗更多内存 (#11595) - 在 ARM 上也默认使用 jemalloc (#11407)
- 在 illumos/solaris 的崩溃报告中添加堆栈跟踪和寄存器转储支持 (#11335)
新的配置选项
- locale-collate 运行时配置来控制影响 Lua 和 SORT 的 setlocale (#11059)
- 在 Sentinel 中添加 CONFIG SET 和 GET 日志级别功能 (#11214)
INFO 字段和内省变化
- 添加了 4 个新的信息字段,用于显示身份验证错误和命令拒绝访问
用于按键、通道和命令 (#11288) - INFO SERVER 包含侦听器列表 (#9320)
模块 API 更改
- 使模块命令成为 ACL 类别的一部分 (#11708)
- 将 K 标志添加到 RM_Call 以允许运行阻塞命令并设置回调以获取响应 (#11568)
- 添加 RM_AddPostNotificationJob 以允许在键空间通知挂钩之后进行写入 (#11199)
- RedisModule_Event_Key 通知键被取消链接以及原因和值 (#9406)
- 添加 RM_BlockClient[Set|Get]PrivateData 将模块数据与被阻止的客户端关联起来 (#11568)
- 允许模块参与/处理 AUTH 验证的 API (#11659)
- RM_GetContextFlags 支持新标志:REDISMODULE_CTX_FLAGS_SERVER_STARTUP (#9320)
- 添加 REDISMODULE_OPTIONS_ALLOW_NESTED_KEYSPACE_NOTIFICATIONS 和 RedisModule_GetModuleOptionsAll (#11199)
- RM_BlockClientOnKeysWithFlags 允许模块在删除密钥时请求解锁 (#11310)
- 引入 aux_save2 可以跳过将该字段保存在 RDB 中并
启用在没有模块的情况下加载文件 (#11374) - 向 RM_Call 添加一个试运行标志,以便在实际执行之前进行验证 (#11158)
- 添加 RM_Microseconds 和 RM_CachedMicroseconds (#11016)
- 添加 RM_ACLAddLogEntryByUserName API 以在没有用户对象的情况下使用 (#11659)
- 可以使 RM_Call 回复的保留时间超过上下文生命周期,以防万一
未使用自动内存 (#11568)
模块 API 可能发生重大变化
- 如果设置了“M”标志,RM_Call 仅在脚本上强制执行 OOM (#11425)
- 阻止模块命令名称中的某些特定字符 (#11434)
- 修复使用键空间通知的模块上的复制不一致问题 (#10969)
- 防止在 onload 处理程序之后注册命令、配置、数据类型 (#11708)
Bug修复
- 引入套接字关闭功能,以便在分叉处于活动状态时正确断开客户端连接 (#11376)
- 客户端重置清除客户端 NO-EVICT 标志 (#11483)
- 减少模块从 RDB 文件加载的字符串的内存使用量 (#11050)
- 修复集群中的节点可能无法复制或处理内部事件的错误
当集群中的另一个节点声明插槽时,密钥被删除 (#11084) - 修复 HINCRBYFLOAT 在新值无效时不创建键 (#11149)
- 使集群配置文件保存原子和 fsync acl 文件保存 (#10924)
- 如果在 RM_Call 中使用 WAIT 命令,则不会阻塞 (#11713)
- 对 COMMAND 命令中命令元数据的小修复(#11201、#10273)
感谢所有使此版本成为可能的用户和开发人员。
我们将跟进更多 RC 版本,直到代码看起来可以投入生产
我们有一段时间没有收到严重问题的报告。
特别感谢您为此版本所做的大量工作:
- 梅厄·施皮莱恩
- 盖伊·贝诺什
——维克托·索德奎斯特
——朱彬彬 - 奥兰阿格拉
- 孙德布
——兰·希德兰斯克 - 皮振伟
——贾森·艾尔鲍姆
——卡蒂克·苏巴拉奥 - 玛德琳·奥尔森
- 黄志伟
- 谢平
——奥赞·特兹坎
——陈天杰
——邓菊
——文慧
——布伦南·卡思卡特
——伊塔玛·哈伯 - 沙亚·波特
- 罗斯汉·卡特里
——斯拉瓦·科夫曼
——朱田
——莫蒂·科恩
——阿拉德·齐伯斯坦 - 巴塞尔纳姆纳
——康明义
——乌里·亚格尔尼克 - 菲利佩·奥利维拉
——赵赵 - 瓦伦蒂诺·杰隆
——雅科夫·哈赞
——阿迪·平斯基
——大卫·卡利尔
——李长军