升级紧急程度说明
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)特制的
SRANDMEMBER
、ZRANDMEMBER
和HRANDFIELD
命令可引发整数溢出,导致Redis服务器进程运行时断言失败并终止。 - (CVE-2022-36021)字符串匹配命令(如
SCAN
或KEYS
),配合特制的模式,可触发针对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的
SETRANGE
和SORT/SORT_RO
命令中的整数溢出可能导致Redis出现内存不足(OOM)并引发恐慌。 - (CVE-2023-22458)Redis的
HRANDFIELD
和ZRANDMEMBER
命令中的整数溢出可能引起拒绝服务(DoS)攻击。
Bug Fixes
- 避免客户端在发出长时间运行的
KEYS
、SRANDMEMBER
、HRANDFIELD
以及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_SetAbsExpire
和RM_GetAbsExpire
API注册的问题 (#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
块内使用FLUSHDB
、FLUSHALL
或SWAPDB
命令时,客户端侧追踪破坏协议的问题 (#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-cli
和redis-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-entries
、hash-max-ziplist-value
、zset-max-ziplist-entries
或zset-max-ziplist-value
配置一个大且非默认的值时,处理ziplist编码数据类型时出现的整数到堆缓冲区溢出问题 [由sundb报告]。 - (CVE-2021-32627)当为
proto-max-bulk-len
和client-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
命令那样的嵌套数组。 - 修复当键不存在时,
HRANDFIELD
和ZRANDMEMBER
命令的回复类型问题 (#9178)。之前使用的是空数组(null array),现已更正为使用空数组(empty array)。 - 修复当源键不存在时,
ZRANGESTORE
命令的回复类型问题 (#9089)。之前错误地使用了类似ZRANGE
命令的空数组,现更正为在STORE变体中使用的0值。
仅适用于Redis 6.2早期版本的漏洞修复包括:
ZRANDMEMBER
命令使用WITHSCORES
选项和负数COUNT参数时,可能返回错误的分数 (#9162)- 修复在启用线程I/O配置后,执行
CLIENT UNPAUSE
命令导致的崩溃问题 (#9041) - 修复
XTRIM
或XADD
命令在使用LIMIT
参数时可能删除超出限制的条目数量的问题 (#9048) - 解决与OpenSSL 1.1.0版本的构建兼容性问题 (#9233)
其他漏洞修复包括:
- 当监视的键已过期时,使
EXEC
命令执行失败 (#9194) - 修复了当成员已存在时,
SMOVE
命令不应使目标键失效(包括WATCH和跟踪状态)的问题 (#9244) - 修复了在遇到类型错误时,
SINTERSTORE
命令不应删除目标键的问题 (#9032) - 修复了32位版本上的
GETBIT
、SETBIT
、BITCOUNT
、BITPOS
和BITFIELD
命令的溢出问题 (#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-user
和sentinel-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)
改进:
- 使得
port
、tls-port
和bind
配置选项能够在运行时修改 (#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/> 获取更多详情。
新命令/参数:
- 添加
HRANDFIELD
和ZRANDMEMBER
命令 (#8297) - 添加
FAILOVER
命令 (#8315) - 添加
GETEX
,GETDEL
命令 (#8327) - 向
SET
命令添加PXAT/EXAT
参数 (#8327) - 向
FLUSHALL
、FLUSHDB
添加SYNC
参数,并向SCRIPT FLUSH
添加ASYNC/SYNC
参数 (#8258)
哨兵(Sentinel)更新:
- 为哨兵添加主机名支持 (#8282)
- 防止文件描述符泄露到哨兵脚本中 (#8242)
- 修复配置文件行顺序依赖性和配置重写序列问题 (#8271)
新的配置选项:
- 添加
set-proc-title
配置选项以禁用进程标题更改 (#3623) - 添加
proc-title-template
选项以控制进程标题显示的内容 (#8397) - 添加
lazyfree-lazy-user-flush
配置选项以控制FLUSHALL
、FLUSHDB
和SCRIPT FLUSH
的行为 (#8258)
漏洞修复:
- AOF:通过开启/关闭
appendonly
配置恢复上次写入错误 (#8030) - 当AOF fsync策略为’always’时,遇到fsync错误则退出 (#8347)
- 在测试arm64 CoW问题时避免老内核上的断言错误 (#8405)
CONFIG REWRITE
应遵循umask设置 (#8371)- 修正某些命令在
COMMAND
命令中的firstkey
、lastkey
、step
信息 (#8367)
特别注意事项:
- 修正保存配置指令的误导性描述 (#8337)
改进:
- 通过复制获取RDB文件而不占用过多的复制缓冲区空间的方法 (#8303)
- 优化大型集群的
clusterGenNodesDescription
性能 (#8182)
信息字段与自省变化:
SLOWLOG
和LATENCY
监控包含阻塞命令的解阻塞时间 (#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/> 查看更详细信息。
新命令/参数:
- 向
ZRANGE
和ZRANGESTORE
命令添加REV
、BYLEX
、BYSCORE
参数 (#7844) - 添加
XAUTOCLAIM
命令 (#7973) - 向
XADD
和XTRIM
命令添加MINID
修剪策略和LIMIT
参数 (#8169) - 向
GEOSEARCH
和GEORADIUS
命令添加ANY
参数 (#8259) - 向
GEOADD
命令添加CH
、NX
、XX
参数 (#8227) - 向
LPOP
和RPOP
命令添加COUNT
参数 (#8179) - 向
CLIENT PAUSE
命令添加WRITE
参数以专暂停写命令 (#8170) - 将
HELLO
命令的proto-ver
参数设为可选 (#7377) - 添加
CLIENT TRACKINGINFO
子命令 (#7309)
命令行为变更:
- 当给定重叠的BCAST前缀时,
CLIENT TRACKING
返回错误 (#8176) SWAPDB
命令使监视的键无效 (#8239)- 在可写副本上使用时,
SORT
命令行为不同 (#8283)
其他行为变更:
- 避免为只读事务传播
MULTI/EXEC
(#8216) - 从
TIME
、ECHO
、ROLE
、LASTSAVE
命令中移除只读标志 (#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)
- 通过
requirepass
和masterauth
配置处理二进制字符串值 (#8200)
平台和部署相关变更:
- 将redis-check-rdb和redis-check-aof安装为redis-server的符号链接 (#5745)
- 检测查ARM64 Linux内核问题 (#8224),由于此问题的潜在严重性,Redis默认拒绝在受影响平台上运行。
信息字段与自省变化:
- 向INFO命令添加
errorstats
部分 (#8217) - 向INFO的
commandstats
部分添加failed_calls
和rejected_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系列:
- 它们不兼容旧版本,这是新增或扩展命令的普遍情况(这些命令无法复制到较旧的副本中)。
- 它们需要更长的候选发布测试周期来确保稳定性与质量。
与6.0.9版本相比
本次发布的全面更新列表,每个更新均包含添加它的PR编号,您可以在<https://github.com/redis/redis/pull/> 获取更多详细信息。
新增命令/参数:
- 添加
SMISMEMBER
命令,用于检查多个成员是否存在 (#7615) - 添加
ZMSCORE
命令,返回分数数组 (#7593) - 添加
LMOVE
和BLMOVE
命令,实现弹出并任意推送 (#6929) - 添加
RESET
命令,重置客户端连接状态 (#7982) - 添加
COPY
命令,复制键 (#7953) - 添加
ZDIFF
和ZDIFFSTORE
命令 (#7961) - 添加
ZINTER
和ZUNION
命令 (#7794) - 添加
GEOSEARCH
和GEOSEARCHSTORE
命令,支持边界框空间查询 (#8094) - 为
SET
命令添加GET
参数,增强GETSET
功能 (#7852) - 为
XPENDING
命令添加独占范围查询 (#8130) - 为
X[REV]RANGE
命令添加独占范围查询 (#8072) - 为
ZADD
命令添加GT
和LT
选项,进行条件分数更新 (#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/LFUOBJECT
不应揭示逻辑上已过期的键 (#8016),现在行为与TYPE
或其他非DEBUG命令一致- 改进
SELECT
和MOVE
命令的数据库索引范围检查 (#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服务的启动、资源管理或者与客户端的交互方式。