Redis 社区版 7.4 发布说明
Redis 社区版 7.4 发布说明。
Redis 社区版 7.4.1 (2024年10月)
升级紧急程度 安全:请查看以下安全修复。
安全修复
- (CVE-2024-31449) Lua库命令可能导致栈溢出和潜在的远程代码执行。
- (CVE-2024-31227) 由于格式错误的ACL选择器可能导致拒绝服务。
- (CVE-2024-31228) 由于无限制的模式匹配可能导致拒绝服务。
欲了解更多信息,请参阅Redis博客文章关于这些漏洞的内容。
Redis 社区版 7.4 (2024年7月)
这是Redis社区版7.4的正式发布版本。
新7.4功能的更改(与7.4 RC2相比)
- #13391,#13438 Hash - 单个字段的过期:RDB文件格式更改
- #13372 Hash - 单个字段的过期:重命名并修复
expired_subkeys
指标的计数 - #13372 Hash - 单个字段的过期:将
INFO
键空间字段重命名为subexpiry
配置参数
- #13400 添加 hide-user-data-from-log - 允许从日志文件中隐藏用户数据
错误修复
- #13407 在
SCRIPT LOAD
后触发 Lua GC - #13380 修复由于无效命令导致的OOM崩溃问题
- #13383
FUNCTION FLUSH
- 改进Lua GC行为并修复ASYNC模式下的线程竞争问题 - #13408
HEXPIRE
类似的命令如果过期时间在过去,应该发出HDEL
键空间通知
Redis 社区版 7.4-rc2 (2024年6月)
升级紧迫性低:这是Redis社区版7.4的第二个候选版本。
性能和资源利用率的改进
- #13296 优化CPU缓存效率
新7.4版本的新功能变化(与7.4 RC1相比)
模块 API - 与 7.4 RC1 相比,新 7.4 功能的潜在破坏性更改
- #13326 Hash - 单个字段的过期:避免在从模块API函数调用时进行延迟过期
Redis 社区版 7.4-rc1 (2024年6月)
升级紧迫性低:这是Redis社区版7.4的第一个候选版本。
以下是此版本与7.2.5相比的全面更改列表。
新功能
- #13303 Hash - 单个字段的过期。引入了9个命令:
HEXPIRE
和HPEXPIRE
设置特定字段的剩余生存时间HEXPIREAT
和HPEXPIREAT
设置特定字段的过期时间为UNIX时间戳HPERSIST
移除特定字段的过期时间HEXPIRETIME
和HPEXPIRETIME
获取特定字段的过期时间HTTL
和HPTTL
获取特定字段的剩余生存时间
- #13117
XREAD
: 新的id值+
用于从最后一条消息开始读取 - #12765
HSCAN
: 新增NOVALUES
标志,仅报告字段名称 - #12728
SORT
,SORT_RO
: 在集群模式下,当模式映射到与键相同的槽时,允许使用BY
和GET
选项 - #12299
CLIENT KILL
: 新的可选过滤器:MAXAGE maxage
- 杀死超过maxage
秒的连接 - #12971 Lua: 暴露
os.clock()
API 用于获取 Lua 代码执行的耗时 - #13276 允许在副本上的
MULTI ... EXEC
事务中使用SPUBLISH
命令
错误修复
- #12898
XREADGROUP
: 修复主节点和副本之间读取条目不一致的问题 - #13042
SORT ... STORE
: 修复创建的列表以遵守列表压缩和打包配置 - #12817, #12905 修复主线程和模块线程之间的竞争条件问题
- #12577 如果主节点所有权发生变化,从分片通道取消订阅所有客户端的副本
- #12622
WAITAOF
如果在仅将效果传播到副本而不传播到AOF的模块命令之后使用,可能会超时或挂起 - #11734
BITCOUNT
和BITPOS
在键不存在和参数非法时返回错误,而不是0 - #12394
BITCOUNT
: 在检查键是否存在之前检查错误的参数 - #12961 允许在内存不足时执行只读事务
- #13274 修复客户端执行ACL更改导致自身断开连接时崩溃的问题
- #13311 集群:修复由于在槽迁移期间解除客户端阻塞导致的崩溃
安全性改进
- #13108 Lua: 使用
EVAL
生成的脚本的LRU淘汰 *** 行为变更 *** - #12961 限制
MULTI ... EXEC
事务的总请求大小 - #12860 编辑ACL用户名信息并将
*-key-file-pass configs
标记为敏感
性能和资源利用率的改进
- #12838 提高当多个客户端同时调用
PUNSUBSCRIBE
/SUNSUBSCRIBE
时的性能 - #12627 减少在唤醒
WAITAOF
客户端且流量不大时的延迟 - #12754 优化
KEYS
当模式包含井号并暗示单个槽时 - #11695 通过用特定于槽的字典替换集群元数据来减少内存并提高性能
- #13087
SCRIPT FLUSH ASYNC
现在不会阻塞主线程 - #12996 活动内存碎片整理效率改进
- #12899 提高重新哈希期间读取/更新操作的性能
- #12536
SCAN ... MATCH
: 当模式暗示集群槽时提高性能 - #12450
ZRANGE ... LIMIT
: 性能提升
其他一般性改进
- #13133 Lua: 使用 jemalloc 而不是 libc 分配 VM 代码,并将其计为已用内存 *** 行为变更 ***
- #12171
ACL LOAD
: 不要断开所有客户端 *** 行为变更 *** - #13020 允许在活动碎片整理运行时调整碎片整理配置
- #12949 提高avg_ttl(键空间键的平均TTL)的准确性
- #12977 允许在脚本中运行
WAITAOF
- #12782 在大多数类Unix系统上实现TCP Keep-Alives
- #12707 改进了在集群模式下拒绝脚本时的错误代码
- #12596 支持在脚本中使用
XREAD ... BLOCK
;仅在最终阻塞时拒绝
新指标
- #12849
INFO
:pubsub_clients
- Pub/Sub模式下的客户端数量 - #12966
INFO
:watching_clients
- 正在监视键的客户端数量 - #12966
INFO
:total_watched_keys
- 监视的键的数量 - #12476
INFO
:client_query_buffer_limit_disconnections
- 统计客户端输入缓冲区OOM事件 - #12476
INFO
:client_output_buffer_limit_disconnections
- 统计客户端输出缓冲区OOM事件 - #12996
INFO
:allocator_muzzy
- 内存已返回给操作系统,但在操作系统回收之前仍显示为RSS - #13108
INFO
:evicted_scripts
- 被驱逐的eval脚本数量。用户可以检查此值以查看是否滥用了EVAL - #12996
MEMORY STATS
:allocator.muzzy
- 返回给操作系统的内存,但在操作系统回收之前仍显示为RSS - #12913
INFO MEMORY
mem_overhead_db_hashtable_rehashing
- 内存重新分片开销(仅即将释放的内存) - #12913
MEMORY STATS
:overhead.db.hashtable.lut
- 数据库中字典桶的总开销 - #12913
MEMORY STATS
:overhead.db.hashtable.rehashing
- 当前正在重新哈希的数据库字典的临时内存开销 - #12913
MEMORY STATS
:db.dict.rehashing.count
- 当前正在重新哈希的顶级字典的数量 - #12966
CLIENT LIST
:watch
- 每个客户端当前正在监视的键的数量
模块 API
- #12985 新的API调用:
RM_TryCalloc
和RM_TryRealloc
- 允许模块优雅地处理内存分配失败 - #13069 新API调用:
RM_ClusterKeySlot
- 一个键将哈希到的槽 - #13069 新API调用:
RM_ClusterCanonicalKeyNameInSlot
- 获取一个将映射到槽的一致键 - #12486 新API调用:
RM_AddACLCategory
- 允许模块声明新的ACL类别
配置参数
- #12178 新增配置参数:
max-new-connections-per-cycle
和max-new-tls-connections-per-cycle
用于限制每个事件循环周期内的新客户端连接数 - #7351 重命名一些CPU配置参数以保持风格一致。添加了旧名称的别名以避免破坏性更改
命令行工具
- #10609 redis-cli: 新增
-t
参数:指定服务器连接超时时间(以秒为单位) - #11315 redis-cli: 新增
-4
和-6
标志,用于在DNS查找时优先使用IPV4或IPV6 - #12862 redis-cli: 允许按上箭头键返回任何命令(包括未持久化的敏感命令)
- #12543 redis-cli: 添加反向历史搜索(类似于终端中的Ctrl+R)
- #12826 redis-cli: 添加
--keystats
和--keystats-samples
以结合--memkeys
和--bigkeys
并提供额外的分布数据 - #12735 redis-cli: 修复:
--bigkeys
和--memkeys
现在可以在集群副本上工作 - #9411 redis-benchmark: 添加对二进制字符串的支持
- #12986 redis-benchmark: 修复:为节点随机选择一个插槽以将操作分布在多个插槽中