Redis 7.2 发行说明

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 SAVEACL GETUSERACL 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-collat​​e 运行时配置来控制影响 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 版本,直到代码看起来可以投入生产
我们有一段时间没有收到严重问题的报告。

特别感谢您为此版本所做的大量工作:

  • 梅厄·施皮莱恩
  • 盖伊·贝诺什
    ——维克托·索德奎斯特
    ——朱彬彬
  • 奥兰阿格拉
  • 孙德布
    ——兰·希德兰斯克
  • 皮振伟
    ——贾森·艾尔鲍姆
    ——卡蒂克·苏巴拉奥
  • 玛德琳·奥尔森
  • 黄志伟
  • 谢平
    ——奥赞·特兹坎
    ——陈天杰
    ——邓菊
    ——文慧
    ——布伦南·卡思卡特
    ——伊塔玛·哈伯
  • 沙亚·波特
  • 罗斯汉·卡特里
    ——斯拉瓦·科夫曼
    ——朱田
    ——莫蒂·科恩
    ——阿拉德·齐伯斯坦
  • 巴塞尔纳姆纳
    ——康明义
    ——乌里·亚格尔尼克
  • 菲利佩·奥利维拉
    ——赵赵
  • 瓦伦蒂诺·杰隆
    ——雅科夫·哈赞
    ——阿迪·平斯基
    ——大卫·卡利尔
    ——李长军