Redis 6.2 发布说明

升级紧急程度说明

Low: 除非想使用新特性,否则无需升级。
MODERATE: 计划升级服务器,但不紧急。
HIGH: 存在可能影响部分用户的关键错误。请升级!
CRITICAL: 存在影响大多数用户的关键错误。尽快升级!
SECURITY: 发布中包含安全修复。

=======================================================================================

Redis 6.2.14 Released Wed 18 Oct 2023 10:33:40 IDT

=======================================================================================

Upgrade urgency SECURITY: See security fixes below.

Security fixes

  • (CVE-2023-45145)listen(2)chmod(2)调用的错误顺序导致了一个竞态条件,该条件可能被其他进程利用,在启动时绕过Unix套接字的预期权限设置。

=======================================================================================

Redis 6.2.13 Released Mon July 10 12:00:00 IDT 2023

=======================================================================================

Upgrade urgency SECURITY: See security fixes below.

Security Fixes

  • (CVE-2022-24834)在Redis中执行的特殊构造的Lua脚本,可以触发cjson和cmsgpack库中的堆溢出,导致堆损坏,并可能最终实现远程代码执行。此问题存在于从2.6版本开始的所有支持Lua脚本的Redis版本中,仅影响已认证和授权的用户。

Bug Fixes

  • 重新启用在存在子进程分裂时的降尺度重哈希功能 (#12276)

=======================================================================================

Redis 6.2.12 Released Mon Apr 17 16:00:00 IST 2023

=======================================================================================

Upgrade urgency: SECURITY, contains fixes to security issues.

Security fixes

  • (CVE-2023-28856)认证用户可以利用HINCRBYFLOAT命令创建一个无效的哈希字段,当尝试访问该字段时会导致Redis崩溃。

Bug Fixes

  • 修复CLIENT REPLY OFF|SKIP命令,以防止其静默推送通知 (#11875)
  • 当撤销allchannels权限时,断开pub-sub订阅者连接 (#11992)
  • 当流节点超过stream-node-max-bytes限制时,修剪过多的内存使用 (#11885)

=======================================================================================

Redis 6.2.11 Released Tue Feb 28 12:00:00 IST 2023

=======================================================================================

Upgrade urgency: SECURITY, contains fixes to security issues.

Security fixes

  • (CVE-2023-25155)特制的SRANDMEMBERZRANDMEMBERHRANDFIELD命令可引发整数溢出,导致Redis服务器进程运行时断言失败并终止。
  • (CVE-2022-36021)字符串匹配命令(如SCANKEYS),配合特制的模式,可触发针对Redis的拒绝服务攻击,使其挂起并占用100%的CPU时间。

Bug Fixes

  • 修复达到客户端追踪最大失效限制时发生的崩溃问题 (#11814)
  • 修复集群入站链接保活时间的问题 (#11785)
  • 确保子进程分裂时不进行增量重哈希操作 (#11692)

Performance and resource utilization improvements

  • 避免在不必要的时候对字符串进行缩容的realloc操作,以减少资源消耗 (#11766)

=======================================================================================

Redis 6.2.10 Released Mon Jan 17 12:00:00 IST 2023

=======================================================================================

Upgrade urgency: MODERATE, a quick followup fix for a recently released 6.2.9.

Bug Fixes

  • 撤销在最近的客户端输出缓冲区限制修复中对KEYS命令所做的更改 (#11676)

=======================================================================================

Redis 6.2.9 Released Mon Jan 16 12:00:00 IDT 2023

=======================================================================================

Upgrade urgency: SECURITY, contains fixes to security issues.

Security fixes

  • (CVE-2022-35977)Redis的SETRANGESORT/SORT_RO命令中的整数溢出可能导致Redis出现内存不足(OOM)并引发恐慌。
  • (CVE-2023-22458)Redis的HRANDFIELDZRANDMEMBER命令中的整数溢出可能引起拒绝服务(DoS)攻击。

Bug Fixes

  • 避免客户端在发出长时间运行的KEYSSRANDMEMBERHRANDFIELD以及ZRANDMEMBER命令并因客户端输出缓冲区限制而断开连接时可能出现的挂起问题 (#11676)
  • 修复了如果副本更改IP时哨兵(Sentinel)的问题 (#11590)

=======================================================================================

Redis 6.2.8 Released Mon 12 Dec 2022 12:00:00 IST

=======================================================================================

Upgrade urgency: MODERATE, Contains fixes for a few non-critical or unlikely bugs

Performance and resource utilization improvements

  • 在执行大规模ZRANGESTORE操作时优化zset转换以提高效率 (#10789)

Module API changes

  • 修复当选择的数据库不是0时,在CLIENT_CHANGE事件中出现的崩溃问题 (#11500)
  • 修复RM_SetAbsExpireRM_GetAbsExpireAPI注册的问题 (#11025, #8564)

Security improvements

  • 哨兵(Sentinel)模式下:避免记录auth-pass值以保护敏感信息 (#9652)

Bug Fixes

  • 修正Lua脚本返回元表时导致的崩溃问题 (#11032)
  • 修复当zset_max_listpack_entries设置为0时ZRANGESTORE命令引发的崩溃问题 (#10767)
  • 手动故障转移结束后立即恢复客户端连接,而非等待定时操作 (#9676)
  • TLS加密连接:在连接关闭时通知客户端 (#10931)
  • 防止父进程崩溃时无盘复制(diskless replication)的子进程挂起 (#11463)
  • 修复哨兵在主机名解析失败时比较主机名的功能问题 (#11419)
  • 修复在启用懒惰释放(lazy-free)且maxmemory-eviction-tenacity设置为100时,合并逐出策略可能会导致的挂起问题 (#11237)
  • 修正脚本执行忽略客户端追踪NOLOOP选项的错误 (#11052)
  • 修复在MULTI-EXEC块内使用FLUSHDBFLUSHALLSWAPDB命令时,客户端侧追踪破坏协议的问题 (#11038)
  • 解决某些编译器因未定义行为导致的BITFIELD溢出检测问题 (#9601)

=======================================================================================

Redis 6.2.7 Released Wed Apr 27 12:00:00 IDT 2022

=======================================================================================

Upgrade urgency: SECURITY, contains fixes to security issues.

Security fixes

  • (CVE-2022-24736)攻击者试图加载特制的Lua脚本时,可导致空指针解引用,从而引发redis-server进程崩溃。此问题影响所有Redis版本。[由Aviv Yahav报告]
  • (CVE-2022-24735)通过利用Lua脚本执行环境中的弱点,具有Redis访问权限的攻击者可注入Lua代码,该代码将以(可能更高)的权限级别作为另一Redis用户执行。[由Aviv Yahav报告]

Potentially Breaking Fixes

  • 当对不存在的列表使用带有计数的LPOP/RPOP命令时,返回空数组 (#10095)
  • 当计数为0时,LPOP/RPOP过去会生成错误的响应 (#9692)

Performance and resource utilization improvements

  • 命令执行管道中的速度优化 (#10502)
  • 修复了在Redis 6.2中引入的Z[REV]RANGE命令(按排名)的回归问题 (#10337)

Platform / toolchain support related improvements

  • 修复在NetBSD和OpenBSD上RSS指标的问题 (#10116, #10149)
  • 修复与OpenSSL 3.0.x相关的议题 (#10291)

Bug Fixes

  • Lua: 在评估Lua脚本时增加对min-slave-*配置的检查 (#10160)
  • Lua: 修复了在v6.2.6中回归的、因脚本调用含大量参数导致的崩溃问题 (#9809)
  • 跟踪:确保无效消息总是在命令回复之后发送 (#9422)
  • 修复因溢出导致的过度流修剪问题 (#10068)
  • 添加遗漏的错误统计至INFO命令的errorstats部分 (#9646)
  • 修正地理搜索边界框检查,避免结果缺失 (#10018)
  • 改进EXPIRE命令的TTL溢出检测机制 (#9839)
  • 模块(Module):修复模块线程添加错误回复时的线程安全违规问题,该问题在6.2版本中引入 (#10278)
  • 模块(Module):修正缺失和重复的错误统计 (#10278)
  • 模块APIs:在集群重分片和下线状态下释放因模块命令阻塞的客户端 (#9483)
  • 哨兵(Sentinel):修复启用TLS时的内存泄漏问题 (#9753)
  • 哨兵(Sentinel):修复主机名支持相关问题 (#10146)
  • 哨兵(Sentinel):修复在特定容器环境中选举失败的问题 (#10197)

=======================================================================================

Redis 6.2.6 Released Mon Oct 4 12:00:00 IDT 2021

=======================================================================================

Upgrade urgency: SECURITY, contains fixes to security issues.

Security fixes

  • (CVE-2021-41099)处理特定字符串命令和网络负载时,当手动配置proto-max-bulk-len为非默认、非常大的值时,整数到堆缓冲区溢出问题 [由yiyuaner报告]。
  • (CVE-2021-32762)在一些较旧和不太常见的平台上,redis-cliredis-sentinel解析大型多bulk回复时出现的整数到堆缓冲区溢出问题 [由Microsoft Vulnerability Research报告]。
  • (CVE-2021-32687)当手动配置set-max-intset-entries为非默认、非常大的值时,intsets引起的整数到堆缓冲区溢出问题 [由Pawel Wieczorkiewicz,AWS报告]。
  • (CVE-2021-32675)处理拥有大量元素的RESP请求负载时,在多个连接上导致的拒绝服务攻击风险。
  • (CVE-2021-32672)Lua调试器中随机堆读取问题 [由Meir Shpilraien报告]。
  • (CVE-2021-32628)当为hash-max-ziplist-entrieshash-max-ziplist-valuezset-max-ziplist-entrieszset-max-ziplist-value配置一个大且非默认的值时,处理ziplist编码数据类型时出现的整数到堆缓冲区溢出问题 [由sundb报告]。
  • (CVE-2021-32627)当为proto-max-bulk-lenclient-query-buffer-limit配置非默认的大值时,流(Streams)相关的整数到堆缓冲区溢出问题 [由sundb报告]。
  • (CVE-2021-32626)特制的Lua脚本可能导致堆缓冲区溢出 [由Meir Shpilraien报告]。

涉及行为变更的漏洞修复包括:

  • 当使用空源键执行GEO* STORE命令时,现在会删除目标键并返回0 (#9271),在此之前,它的表现类似于非STORE变体,会返回一个空数组。
  • PUBSUB NUMPAT命令现在返回的是模式数量而非订阅数量 (#9209),这一改变实际上在6.2.0版本中已经实施,但由于疏忽并未被记载于当时的发行说明中。

仅适用于Redis 6.2早期版本的漏洞修复包括:

  • 修复了CLIENT PAUSE命令复用前一次暂停的超时时间的问题 (#9477)
  • 修复了在副本(replica)上使用CLIENT PAUSE命令会干扰复制偏移量的问题 (#9448)
  • INFO errorstats中添加了一些遗漏的错误统计信息 (#9328)

其他漏洞修复包括:

  • 修正了COMMAND命令对于MIGRATE命令的键位置回复不正确的问题 (#9455)
  • 确保在MacOS和FreeBSD(使用kqueue)上,appendfsync总是在回复前执行fsync操作 (#9416)
  • 修复了对sync_file_range系统调用的误检测问题,该问题曾影响性能 (#9371)

CLI工具相关修复:

  • 修复了当redis-cli接收到ASK响应时未对其进行处理的问题 (#8930)

改进内容包括:

  • 在通过惰性过期删除键时,向延迟监控添加采样点 (#9317)
  • 对清理损坏的数据载荷功能的改进 (#9321, #9399)
  • 在加载RDB文件或处理RESTORE命令时,删除空键 (#9297, #9349)

=======================================================================================

Redis 6.2.5 Released Wed Jul 21 16:32:19 IDT 2021

=======================================================================================

Upgrade urgency: SECURITY, contains fixes to security issues that affect
authenticated client connections on 32-bit versions. MODERATE otherwise.

修复32位版本中的BITFIELD整数溢出问题(CVE-2021-32761)。
在Redis 2.2及以上版本中存在一个整数溢出漏洞,攻击者可能利用BITFIELD命令来破坏堆内存,进而可能导致远程代码执行。

涉及行为变更的漏洞修复包括:

  • 更改在RESP3中使用ZPOPMAX/MIN命令带计数时的回复类型为嵌套数组 (#8981)。此前使用的是类似RESP2的扁平数组,而不是像ZRANGE命令那样的嵌套数组。
  • 修复当键不存在时,HRANDFIELDZRANDMEMBER命令的回复类型问题 (#9178)。之前使用的是空数组(null array),现已更正为使用空数组(empty array)。
  • 修复当源键不存在时,ZRANGESTORE命令的回复类型问题 (#9089)。之前错误地使用了类似ZRANGE命令的空数组,现更正为在STORE变体中使用的0值。

仅适用于Redis 6.2早期版本的漏洞修复包括:

  • ZRANDMEMBER命令使用WITHSCORES选项和负数COUNT参数时,可能返回错误的分数 (#9162)
  • 修复在启用线程I/O配置后,执行CLIENT UNPAUSE命令导致的崩溃问题 (#9041)
  • 修复XTRIMXADD命令在使用LIMIT参数时可能删除超出限制的条目数量的问题 (#9048)
  • 解决与OpenSSL 1.1.0版本的构建兼容性问题 (#9233)

其他漏洞修复包括:

  • 当监视的键已过期时,使EXEC命令执行失败 (#9194)
  • 修复了当成员已存在时,SMOVE命令不应使目标键失效(包括WATCH和跟踪状态)的问题 (#9244)
  • 修复了在遇到类型错误时,SINTERSTORE命令不应删除目标键的问题 (#9032)
  • 修复了32位版本上的GETBITSETBITBITCOUNTBITPOSBITFIELD命令的溢出问题 (#9191)
  • 改进了对流(stream)键的MEMORY USAGE命令的性能 (#9164)
  • 在集群总线的入站连接上设置TCP保活机制 (#9230)
  • 修复无盘副本加载逻辑,以便从模块AUX数据的RDB短读取中恢复 (#9199)
  • 修复客户端侧跟踪中的竞争条件问题 (#9116)
  • 修正了在大端平台上的ziplist长度更新问题 (#2080)

CLI 工具的改进与修复包括:

  • 修复了 redis-cli cluster import 命令可能发出错误的 MIGRATE 命令的问题,原本应该发送 REPLACE 却错误地发送了 COPY (#8945)
  • 修复了使用 - 将输出重定向到标准输出(stdout)时,redis-cli --rdb 的一些问题 (#9136, #9135)
  • 增强了 redis-cli 对于 RESP3 格式中集合(set)类型的支持,在 CSV 和 RAW 输出模式下均可正确处理 (#7338)

模块相关的更新和修复包括:

  • 新增模块API以获取当前正在执行的命令名称 (#8792)
  • 修复了当newlen为0时,RM_StringTruncate函数的问题 (#3718)
  • 修复了在没有超时回调的情况下,执行CLIENT UNBLOCK命令导致模块崩溃的问题 (#9167)

=======================================================================================

Redis 6.2.4 Released Tue June 1 12:00:00 IST 2021

=======================================================================================

升级紧迫性:安全(SECURITY),包含影响认证客户端连接的安全问题修复。其他情况下为中等(MODERATE)。

修复STRALGO LCS中的整数溢出(CVE-2021-32625)
在Redis 6.0及以上版本中存在一个整数溢出漏洞,攻击者可能利用STRALGO LCS命令破坏堆内存,从而可能导致远程代码执行。这是CVE-2021-29477修复不完全的结果。

仅适用于Redis 6.2早期版本的漏洞修复包括:

  • 修复了无盘复制(fork)子进程被终止后的崩溃问题 (#8991)
  • 修复了在不支持的配置下,redis-benchmark命令崩溃的问题 (#8916)

其他漏洞修复包括:

  • 修复了在含有已删除消费者组的流(stream)键上执行UNLINK命令导致的崩溃问题 (#8932)
  • SINTERSTORE: 当没有任何源存在时,添加遗漏的keyspace del事件 (#8949)
  • 哨兵(Sentinel): 修复了设置为空字符串的sentinel-usersentinel-pass配置项的CONFIG SET命令问题 (#8958)
  • 在无流量时强制执行客户端输出缓冲区的软限制 (#8833)

改进内容包括:

  • 在慢日志(slowlog)中隐藏MIGRATE命令中的AUTH密码 (#8859)

=======================================================================================

Redis 6.2.3 Released Mon May 3 19:00:00 IST 2021

=======================================================================================

Upgrade urgency: SECURITY, Contains fixes to security issues that affect
authenticated client connections. LOW otherwise.

整数溢出在COPY命令处理大型intsets时的问题(CVE-2021-29478):
Redis 6.2版本中存在一个整数溢出漏洞,可能被利用来破坏堆内存,导致远程代码执行。该漏洞涉及到修改默认的set-max-intset-entries配置值,创建一个由整数值组成的大集合键,并使用COPY命令复制它。该整数溢出漏洞存在于所有从2.6版本开始的Redis中,其中可能导致RDB或DUMP数据负载损坏,但在6.2版本之前的COPY命令(当时尚不存在)无法被利用。

仅适用于Redis 6.2早期版本的漏洞修复包括:

  • 修复了在moduleDefragGlobals中的内存泄漏问题 (#8853)
  • 修复了在进行懒惰释放客户端追踪表时的内存泄漏问题 (#8822)
  • 阻止滥用的副本发送可能导致Redis断言并崩溃的命令 (#8868)

其他漏洞修复包括:

  • 使用单调时钟检查Lua脚本超时情况 (#8812)
  • redis-cli: 在集群模式下被重定向时,不使用Unix域套接字 (#8870)

模块相关修复:

  • 修复RM_GetClusterNodeInfo()以正确填充主节点ID (#8846)

=======================================================================================

Redis 6.2.2 Released Mon April 19 19:00:00 IST 2021

=======================================================================================

升级紧迫性:高,如果您正在使用ACL(访问控制列表)和发布/订阅功能,或者执行了CONFIG REWRITE命令,又或者遇到了性能衰退的问题,请务必查看以下内容并考虑升级。

Redis 6.2之前版本中的回归问题修复包括:

  • 修复了由于子进程报告写时复制(CoW)导致的BGSAVE、AOF重写(AOFRW)及复制减速问题 (#8645)
  • 修复了定时事件即将触发时的短暂繁忙循环问题 (#8764)
  • 修复了默认用户、被覆盖和重置用户丢失发布/订阅频道权限的问题 (#8723)
  • 修复了使用空的save配置进行配置重写后,导致默认save值恢复的问题 (#8719)
  • 修复了在没有IPv6的Alpine/libmusl环境下无法启动的问题 (#8655)
  • 修复了模块中与传播和MULTI/EXEC指令相关的问题,包括嵌套调用和线程安全上下文的多个问题 (#8617)

仅适用于Redis 6.2早期版本的漏洞修复包括:

  • ACL中针对保存/加载场景的Pub/Sub频道权限处理 (#8794)
  • 修复了在MULTI-EXEC事务内部提前拒绝PUBLISH命令的问题 (#8534)
  • 修复了缺少阻塞命令的SLOWLOG记录问题 (#8632)
  • 允许在执行繁忙脚本期间使用RESET命令 (#8629)
  • 修复了某些错误回复在统计中未被计算的问题 (#8659)

漏洞修复包括:

  • 为卡在全同步状态的副本添加超时机制 (#8762)
  • 即使默认用户没有权限也处理HELLO命令 (#8633)
  • 客户端在使用管道执行长时间运行的脚本时断开连接的问题 (#8715)
  • 修复脚本杀戮功能,使其也能作用于使用pcall的脚本 (#8661)
  • 修复list-compress-depth可能压缩比需要更多的节点的问题 (#8311)
  • 修复redis-cli处理rediss:// URL方案的问题 (#8705)
  • 集群:跳过可能阻止故障检测的不必要的检查 (#8585)
  • 集群:修复当副本刚刚启动时的手动故障转移挂起问题 (#8651)
  • 哨兵:在哨兵首次响应前修复info-refresh时间字段问题 (#8567)
  • 哨兵:修复连接尝试失败时可能发生的崩溃问题 (#8627)
  • Systemd:当副本准备好接受连接时发送就绪通知 (#8409)

命令行为变更包括:

  • ZADD:修复了在使用GT/LT时结合INCR选项且阻止更新时的错误回复问题 (#8717)。之前会返回递增后的值而不是nil。
  • XAUTOCLAIM:修复响应以返回下一个可用ID作为游标(#8725)。之前的行为是返回已经被扫描过的最后一个ID。
  • XAUTOCLAIM:修复JUSTID以防止递增delivery_count (#8724)。

新增配置选项包括:

  • 添加cluster-allow-replica-migration配置选项,允许迁移副本 (#5285)
  • 添加replica-announced配置选项,允许声明副本身份 (#8653)
  • 在TLS集群中增加对明文客户端的支持 (#8587)
  • 添加支持读取加密的密钥文件功能 (#8644)

改进方面包括:

  • 修复了Redis 6.0中BRPOP命令的性能退化问题 (#8689)
  • 避免在配置包含敏感数据时添加慢日志条目 (#8584)
  • 改进redis-cli对非二进制安全字符串的处理 (#8566)
  • 优化CLUSTER SLOTS回复的效率 (#8541)
  • 处理剩余的fsync错误情况 (#8419)

信息字段与自省变化包括:

  • 从current_fork_perc信息字段中移除百分比符号(%) (#8628)
  • 修复FreeBSD上的RSS内存信息显示问题 (#8620)
  • 当所有客户端断开时,修复INFO CLIENTS中的client_recent_max_input/output_buffer信息 (#8588)
  • 修复info replication中master_link_down_since_seconds的不准确信息 (#8785)

平台与部署相关的变化:

  • 修复FreeBSD 12.x以下版本的构建问题 (#8603)

模块相关更新:

  • 为RedisModule_log日志添加不同等级的宏定义 (#4246)
  • 添加RedisModule_GetAbsExpire和RedisModule_SetAbsExpire API,用于获取和设置绝对过期时间 (#8564)
  • 引入键空间通知的模块类型 (#8759)
  • 仅在主节点上设置模块逐出上下文标志 (#8631)
  • 修复不可用的RedisModule_IsAOFClient API问题 (#8596)
  • 修复EVAL执行失败后模块传播缺少EXEC命令的问题 (#8654)
  • 修复模块客户端解除阻塞的边缘情况问题 (#8618)

=======================================================================================

Redis 6.2.1 Released Mon Mar 1 17:51:36 IST 2021

=======================================================================================

Upgrade urgency: LOW.

以下是相对于6.2.0版本本次发布的全面更改列表,每个更改都包含了添加它的PR编号,您可以在<https://github.com/redis/redis/pull/> 获取更多详细信息。

漏洞修复:

  • 修复了包含已删除记录的Stream数据的sanitize-dump-payload问题 (#8568)
  • 防止client-query-buffer-limit配置设置低于1MB (#8557)

改进:

  • 使得porttls-portbind配置选项能够在运行时修改 (#8510)

平台和部署相关更改包括:

  • 修复了在非glibc系统上若未使用jemalloc时的编译错误 (#8533)
  • 提升了FreeBSD上的内存消耗和内存使用跟踪能力 (#8545)
  • 修复了在ARM64 MacOS系统上使用jemalloc的编译问题 (#8458)

模块相关更新:

  • 新增获取客户端用户名的模块API (#8508)
  • 通过使用共享可重用客户端优化RM_Call的性能 (#8516)
  • 修复了通过RM_Call运行CLIENT INFO命令时的崩溃问题 (#8560)

=======================================================================================

Redis 6.2.0 GA Released Tue Feb 22 14:00:00 IST 2021

=======================================================================================

如果您之前使用的是Redis 6.2的早期版本,请注意这是一个重要的低危更新。否则,更新的紧急程度较低。

32位系统中的整数溢出(CVE-2021-21309):
Redis 4.0及以上版本使用了一个可配置的最大支持的bulk输入尺寸限制。默认值为512MB,对所有平台都是安全的。如果将此限制显著提高,从客户端接收大型请求可能会触发多种整数溢出场景,导致缓冲区溢出和堆损坏。

与6.2 RC3版本相比,此版本的完整变更列表如下,每个变更均附有对应的PR编号,您可以通过访问<https://github.com/redis/redis/pull/> 获取更多信息。

漏洞修复:

  • proto-max-bulk-len设置得过高时,避免32位溢出问题 (#8522)
  • 修复客户端追踪中tracking-redir-broken消息的协议错误 (#8456)
  • 在INFO命令的commandstats、errorstats、modules中避免使用不安全的字段名字符 (#8492)
  • CLIENT PAUSE WRITE期间,XINFO能够访问已过期的键 (#8436)
  • 修复REPLCONF ip-address允许长度问题,因Sentinel支持主机名所需 (#8517)
  • 使用-a--dbnum时,修复redis-benchmark的协议错误 (#8486)
  • 在切换到新listpack时,XADD计算已删除记录 (#8390)

仅适用于Redis 6.2早期版本的漏洞修复:

  • 修复GEOSEARCH的bybox问题(精确度和宽度与高度不匹配) (#8445)
  • 修复HRANDFIELD、ZRANDMEMBER命令在巨大负数计数下的OOM风险 (#8429)
  • 因支持主机名而修复哨兵的重复副本问题 (#8481)
  • 基于#8271的改进,修复哨兵配置重写问题 (#8480)

命令行为变更:

  • SRANDMEMBER使用RESP3数组类型代替集合类型 (#8504)
  • EXPIRE, EXPIREAT, SETEX, GETEX:当提供的过期时间溢出时返回错误 (#8287)

其他行为变更:

  • 如果完全添加了命令,则移除ACL子命令验证 (#8483)

改进:

  • 在GEORADIUS / GEOSEARCH使用COUNT时优化排序 (#8326)
  • 当ziplist编码时,优化HRANDFIELD和ZRANDMEMBER的case 4 (#8444)
  • 优化HSET、HINCRBY、LSET中的原地替换元素操作 (#8493)
  • 移除存储pubsub模式的冗余列表 (#8472)
  • 向命令行工具添加--insecure选项 (#8416)

信息字段与自省变化:

  • 添加INFO字段追踪BGSAVE、AOFRW、复制的进度 (#8414)

模块:

  • RM_ZsetRem:若为空则删除键,修复可能留下空zset键的bug (#8453)
  • RM_HashSet:添加COUNT_ALL标志并设置errno (#8446)

=======================================================================================

Redis 6.2 RC3 Released Tue Feb 1 14:00:00 IST 2021

=======================================================================================

此为Redis 6.2的第三个候选发布版本,升级紧迫性较低。

相较于6.2 RC2版本,此版本的完整更新列表如下,每个更新均包含添加它的PR编号,以便您可以在<https://github.com/redis/redis/pull/> 获取更多详情。

新命令/参数:

  • 添加HRANDFIELDZRANDMEMBER命令 (#8297)
  • 添加FAILOVER命令 (#8315)
  • 添加GETEXGETDEL命令 (#8327)
  • SET命令添加PXAT/EXAT参数 (#8327)
  • FLUSHALLFLUSHDB添加SYNC参数,并向SCRIPT FLUSH添加ASYNC/SYNC参数 (#8258)

哨兵(Sentinel)更新:

  • 为哨兵添加主机名支持 (#8282)
  • 防止文件描述符泄露到哨兵脚本中 (#8242)
  • 修复配置文件行顺序依赖性和配置重写序列问题 (#8271)

新的配置选项:

  • 添加set-proc-title配置选项以禁用进程标题更改 (#3623)
  • 添加proc-title-template选项以控制进程标题显示的内容 (#8397)
  • 添加lazyfree-lazy-user-flush配置选项以控制FLUSHALLFLUSHDBSCRIPT FLUSH的行为 (#8258)

漏洞修复:

  • AOF:通过开启/关闭appendonly配置恢复上次写入错误 (#8030)
  • 当AOF fsync策略为’always’时,遇到fsync错误则退出 (#8347)
  • 在测试arm64 CoW问题时避免老内核上的断言错误 (#8405)
  • CONFIG REWRITE应遵循umask设置 (#8371)
  • 修正某些命令在COMMAND命令中的firstkeylastkeystep信息 (#8367)

特别注意事项:

  • 修正保存配置指令的误导性描述 (#8337)

改进:

  • 通过复制获取RDB文件而不占用过多的复制缓冲区空间的方法 (#8303)
  • 优化大型集群的clusterGenNodesDescription性能 (#8182)

信息字段与自省变化:

  • SLOWLOGLATENCY监控包含阻塞命令的解阻塞时间 (#7491)

模块(Modules)更新:

  • 添加针对流(streams)的模块API (#8288)
  • 添加子进程诞生与终止事件 (#8289)
  • 添加RM_BlockedClientMeasureTime*等,以跟踪命令统计中的后台处理时间 (#7491)
  • 修复v6.2中的错误,向新的unlink回调传递错误值的问题 (#8381)
  • 修复v6.2中的问题,模块在诸如LPUSH之类的命令上阻塞的键被解阻塞的问题 (#8356)

=======================================================================================

Redis 6.2 RC2 Released Tue Jan 12 16:17:20 IST 2021

=======================================================================================

此为Redis 6.2的第二个候选发布版本,升级紧迫性较低。重要提示:如果您在ARM64架构或大端系统上运行Redis,升级可能具有重要意义,请确保仔细阅读以下注意事项。

相较于6.2 RC1版本,此版本的更新内容详列如下,每个更新项均附带了相应的PR编号,您可以在<https://github.com/redis/redis/pull/> 查看更详细信息。

新命令/参数:

  • ZRANGEZRANGESTORE命令添加REVBYLEXBYSCORE参数 (#7844)
  • 添加XAUTOCLAIM命令 (#7973)
  • XADDXTRIM命令添加MINID修剪策略和LIMIT参数 (#8169)
  • GEOSEARCHGEORADIUS命令添加ANY参数 (#8259)
  • GEOADD命令添加CHNXXX参数 (#8227)
  • LPOPRPOP命令添加COUNT参数 (#8179)
  • CLIENT PAUSE命令添加WRITE参数以专暂停写命令 (#8170)
  • HELLO命令的proto-ver参数设为可选 (#7377)
  • 添加CLIENT TRACKINGINFO子命令 (#7309)

命令行为变更:

  • 当给定重叠的BCAST前缀时,CLIENT TRACKING返回错误 (#8176)
  • SWAPDB命令使监视的键无效 (#8239)
  • 在可写副本上使用时,SORT命令行为不同 (#8283)

其他行为变更:

  • 避免为只读事务传播MULTI/EXEC (#8216)
  • TIMEECHOROLELASTSAVE命令中移除只读标志 (#8216)
  • 修正PFDEBUG命令标志 (#8222)
  • 跟踪客户端在执行FLUSHDB后不再收到不必要的键无效消息 (#8039)
  • 哨兵:修复SENTINEL SET命令后配置文件缺失更新的问题 (#8229)

与兼容性相关的漏洞修复(Redis 6.0引入的漏洞):

  • 修复大端系统上的RDB CRC64校验和问题 (#8270),若使用大端系统,请考虑与RESTORE、复制和持久化的兼容性影响。
  • 修正Lua中映射响应中键/值的错误顺序 (#8266),若您的脚本使用了redis.setresp()或返回映射(Redis 6.0新增),请考虑其影响。

仅适用于Redis 6.2早期版本的漏洞修复:

  • 解决加载过程中主动碎片整理中的罕见断言问题 (#8284, #8281)

漏洞修复:

  • 修复从大哈希表中随机选择元素的问题 (#8133)
  • 修复子进程删除父进程pidfile的问题 (#8231)
  • 修复启用io-threads-do-reads时的崩溃问题 (#8230)
  • 修复执行集群备份后redis-cli的崩溃问题 (#8267)
  • 修复redis-benchmark使用集群首个节点的IP地址问题 (#8154)
  • 修复大于2GB的字符串保存至RDB文件的问题 (#8306)

额外改进:

  • 改善复制握手时间 (#8214)
  • 在异步释放数据库的同时异步释放客户端追踪表内存 (#8039)
  • 避免特定情况下的浪费性临时内存分配 (#8286, #5954)
  • 通过requirepassmasterauth配置处理二进制字符串值 (#8200)

平台和部署相关变更:

  • 将redis-check-rdb和redis-check-aof安装为redis-server的符号链接 (#5745)
  • 检测查ARM64 Linux内核问题 (#8224),由于此问题的潜在严重性,Redis默认拒绝在受影响平台上运行。

信息字段与自省变化:

  • 向INFO命令添加errorstats部分 (#8217)
  • 向INFO的commandstats部分添加failed_callsrejected_calls字段 (#8217)
  • 连续报告子进程写时拷贝指标 (#8264)

模块API变更:

  • 添加RedisModule_SendChildCOWInfo API (#8264)
  • 添加may-replicate命令标志 (#8170)

=======================================================================================

Redis 6.2 RC1 Released Mon Dec 14 11:50:00 IST 2020

=======================================================================================

Upgrade urgency LOW: This is the first Release Candidate of Redis 6.2.

Introduction to the Redis 6.2 release

此版本标志着Redis核心团队在新的项目治理模式下管理的首次重大发布。

Redis 6.2版引入了许多新命令和改进,但并未增加重大特性。它主要着眼于让Redis更加完善,解决了许多用户长期频繁提出的需求和问题。

许多这些变更因多种原因未能纳入6.0.x系列:

  1. 它们不兼容旧版本,这是新增或扩展命令的普遍情况(这些命令无法复制到较旧的副本中)。
  2. 它们需要更长的候选发布测试周期来确保稳定性与质量。

与6.0.9版本相比

本次发布的全面更新列表,每个更新均包含添加它的PR编号,您可以在<https://github.com/redis/redis/pull/> 获取更多详细信息。

新增命令/参数:

  • 添加SMISMEMBER命令,用于检查多个成员是否存在 (#7615)
  • 添加ZMSCORE命令,返回分数数组 (#7593)
  • 添加LMOVEBLMOVE命令,实现弹出并任意推送 (#6929)
  • 添加RESET命令,重置客户端连接状态 (#7982)
  • 添加COPY命令,复制键 (#7953)
  • 添加ZDIFFZDIFFSTORE命令 (#7961)
  • 添加ZINTERZUNION命令 (#7794)
  • 添加GEOSEARCHGEOSEARCHSTORE命令,支持边界框空间查询 (#8094)
  • SET命令添加GET参数,增强GETSET功能 (#7852)
  • XPENDING命令添加独占范围查询 (#8130)
  • X[REV]RANGE命令添加独占范围查询 (#8072)
  • ZADD命令添加GTLT选项,进行条件分数更新 (#7818)
  • 添加CLIENT INFO和针对特定ID的CLIENT LIST (#8113)
  • XPENDING命令添加IDLE参数 (#7972)
  • CLIENT LIST添加本地地址信息和CLIENT KILL过滤器 (#7913)
  • XADD命令添加NOMKSTREAM选项 (#7910)
  • 为哨兵添加命令自省功能 (#7940)
  • 添加SENTINEL MYID子命令 (#7858)

新功能:

  • payload进行预处理,剔除可能引起错误或恶意执行的部分,确保后续操作的安全性 (#7807),提供O(N)验证标志(默认禁用)
  • ACL模式支持Pub/Sub通道模式匹配 (#7993)
  • 支持哨兵模式下的ACL (#7888)
  • 同时从标准输入和文件获取配置支持 (#7893),避免磁盘存储敏感信息

CLI工具新功能:

  • redis-cli支持RESP3推送 (#7609)
  • redis-cli集群导入支持需要认证的源和目标 (#7994)
  • redis-cli URI支持提供用户名及密码 (#8048)
  • redis-cli/redis-benchmark允许指定首选的加密套件 (#8005)
  • redis-cli添加-e选项,在命令执行失败时退出并返回代码 (#8136)

命令行为变更:

  • EXISTS不应改变LRU状态 (#8016),之前版本会触碰LRU/LFU
  • OBJECT不应揭示逻辑上已过期的键 (#8016),现在行为与TYPE或其他非DEBUG命令一致
  • 改进SELECTMOVE命令的数据库索引范围检查 (#8085)
  • 修改AUTH/HELLO错误信息文本 (#7648)
  • BITOPS长度限制为proto_max_bulk_len而非固定512MB (#8096),现可配置
  • GEORADIUS[BYMEMBER]在Redis达到内存上限时可能失败 (#8107)

其他行为变更:

  • 绑定地址不可用时,可选(默认)启动失败 (#7936),需调整新配置
  • 限制主数据库字典扩展以防止键驱逐 (#7954),减少重哈希带来的大规模驱逐
  • CONFIG REWRITE原子且更安全,但要求配置文件夹写权限 (#7824, #8051)
  • 新增量驱逐机制减少驱逐尖峰时延时 (#7653),极端情况下可能导致内存无限制增长
  • 不再在命令行参数启动时重置“save”配置 (#7092)
  • 加载期间更新INFO内存指标 (#7690)
  • 启用“supervised”配置优先于“daemonize” (#8036)
  • 断言和panic时打印崩溃日志,不生成SIGSEGV (#7585)
  • 在SIGABRT时添加崩溃日志报告,而非静默退出 (#8004)
  • 禁用THP(透明大页)如果启用 (#7381),需配置Redis保持启用状态

漏洞修复:

  • 处理模块阻塞客户端的输出缓冲区限制 (#8141)
  • 修复setproctitle相关崩溃 (#8150, #8088)
  • 模块使用RM_Call导致副本嵌套MULTI (#8097)
  • 集群模式下repl-diskless-load=swapdb的备份/恢复键槽映射问题 (#8108)
  • 修复oom-score-adj-values范围及配置文件使用问题 (#8046)
  • 清零空数据库时重置平均ttl (#8106)
  • Redis有子进程时禁用rehash (#8007)
  • 进一步改进ACL算法选取类别 (#7966)
  • 修复模块GIL过早释放问题 (#8061)
  • 修复无firstkey的模块命令的集群重定向问题 (#7539)
  • 减少客户端追踪引起的键驱逐反馈循环效应 (#8100)
  • 所有副本断开且未启用save时,杀死disk-based fork子进程 (#7819)
  • 重写命令(传播修改)记录为原始命令形式 (#8006)
  • 修复集群对未对齐内存访问(旧ARM上的SIGBUS) (#7958)
  • 确保diskless repl子进程被收割 (#7742)
  • 槽迁移完成时广播PONG,减少MOVED响应 (#7571)

其他改进:

  • redis-benchmark支持TLS (#7959)
  • 加速diskless master连接及一般重连 (#6271)
  • 加载/阻塞期间运行主动去碎片整理 (#7726)
  • 性能与内存报告优化 - sds控制其内部碎片 (#7875)
  • 加快集群故障转移 (#7948)

平台/工具链相关改进:

  • 可选使用硬件单调时钟进行更快的时间采样 (#7644)
  • 移除C11及_Atomic支持编译器要求 (#7707)
  • 修复ARM上的崩溃日志寄存器输出 (#8020)
  • 树莓派构建修复 (#8095)
  • Haiku的支持进程标题设置 (#8060)
  • DragonFlyBSD的RSS内存采样支持 (#8023)

新配置选项:

  • 配置OpenSSL使用标准openssl.cnf (#8143)
  • oom-score-adj-values配置支持绝对值 (#8046)
  • TLS:添加不同的客户端证书支持 (#8076)
  • 其他变更中也添加了各自的配置选项。

信息字段与自省变化:

  • 添加INFO字段跟踪diskless和disk-based复制进度 (#7981)
  • 添加INFO字段记录主线程CPU时间和系统时间 (#8132)
  • 添加total_forks到INFO STATS (#8155)
  • 添加maxclients和cluster_connections到INFO CLIENTS (#7979)
  • 添加bcast标志和客户端重定向到client list (#7995)
  • 修复INFO client_recent_max_input_buffer包含argv数组 (#8065, 参见#7874)
  • 其他变更中也添加了各自的info字段。

模块API变更:

  • 添加CTX_FLAGS_DENY_BLOCKING统一标识是否允许阻塞 (#8025)
  • 添加数据类型回调支持lazy free effort和unlink (#7912)
  • 添加COPY命令的数据类型回调 (#8112)
  • 添加defrag支持的回调 (#8149)
  • 添加repl-diskless-load swapdb的模块事件 (#8153)

模块相关修复:

  • 移动RMAPI_FUNC_SUPPORTED以可用 (#8037)
  • 提高计时器精度 (#7987)
  • 允许RM_CreateStringPrintf结果中包含’\0’ (#6260)

Migrating from 6.0 to 6.2

Redis 6.2 相较于 6.0 版本几乎是一个严格意义上的超集,这意味着从 6.0 升级到 6.2 应该不会遇到大问题。然而,上方列出了一些行为上的小变化,务必确认这些变化没有对您的应用产生不良影响。

具体来说,需要关注以下几个方面:

  • 命令行为变化:这涉及到一些命令的工作方式可能有了细微调整,例如它们的响应、参数处理或对数据的影响方式。确保应用中依赖这些命令的逻辑依然能够正确执行。
  • 其他行为变化:这部分包括了除命令之外的Redis服务器行为调整,比如启动参数处理、内存管理、配置操作或是网络交互等方面的变化。这些改动可能会影响到Redis服务的启动、资源管理或者与客户端的交互方式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值