Redis 8.6
提示
来自deepseek解释
原文链接:https://redis.io/docs/latest/develop/whats-new/8-6/
Redis 8.6 在 Redis 8.4 的基础上进行了重大增强,涉及流可靠性、内存管理和安全功能。
本版本在多个领域提供了重大改进:
- 流的幂等性,提供至多一次交付保证
- 针对最近最少修改数据的新逐出策略
- 热键检测和报告能力
- 基于 TLS 证书的自动客户端身份验证
- 增强的时间序列支持,包括 NaN 值和新的聚合器
- 哈希和有序集合的内存大幅减少
- 键内存大小直方图,提供更好的监控
- 超过 20 项性能和资源利用率改进
以下是这些更新的详细说明。
安全改进
Redis 8.6 包含重要的安全和隐私增强:
- 隐私保护:个人身份信息现在在 Redis 核心和模块的 ACL 日志和服务器日志中被隐藏。
- ACL 安全修复:修复了
MSETEX命令中的键模式绕过漏洞。 - 模块安全:修复了 RedisBloom 中加载无效 RDB 文件时的越界读取漏洞。
新特性
流幂等性
Redis 8.6 为 Redis Streams 引入了强大的幂等性功能,提供至多一次交付保证:
- IDMPAUTO 参数:为
XADD操作自动生成幂等标识符。 - IDMP 参数:允许手动指定幂等标识符。
这些功能防止流中出现重复条目,使 Redis Streams 在关键数据处理管道中更加可靠,避免重复处理可能引起的问题。
增强的内存管理
Redis 8.6 引入了新的逐出策略,提供更细粒度的内存管理控制:
- volatile-lrm:基于最近最少修改条件逐出带有过期时间的键。
- allkeys-lrm:基于最近最少修改条件逐出任何键。
这些策略通过关注修改模式而非访问模式,补充了现有的 LRU(最近最少使用)策略,为写密集型工作负载提供了更好的控制。
热键检测
新的 HOTKEYS 命令支持实时检测和报告频繁访问的键。此功能有助于识别性能瓶颈并优化集群环境中的数据分布。
基于 TLS 证书的身份验证
Redis 8.6 引入了使用 TLS 证书的自动客户端身份验证。此功能通过自动将 TLS 证书映射到 Redis 用户来简化安全连接,减少在启用证书的环境中基于密码的身份验证需求。
增强的时间序列能力
Redis 8.6 扩展了时间序列功能:
- NaN 值支持:时间序列现在可以存储和处理非数字值,用于不完整或无效的数据点。
- 新的聚合器:
COUNTNAN和COUNTALL聚合器为包含 NaN 值的数据集提供了更好的分析能力。
内存监控与分析
Redis 8.6 引入了高级内存监控能力:
- 键内存大小直方图:按数据类型收集详细的内存消耗直方图,以更好地理解内存使用模式。
- 按槽统计:新的集群槽统计信息提供了跨集群节点的资源消耗洞察。
改进
Redis 8.6 在核心操作和数据结构方面提供了显著的性能改进。
性能优化
- 回复优化:复制规避路径减少了批量字符串回复的内存复制,并优化了列表节点分配。
- 数据结构改进:哈希和有序集合操作受益于统一的字段/值和分数/值结构,实现了大幅内存减少。
- 迭代器优化:改进了哈希字段操作的 listpack 迭代器性能。
- 命令优化:增强了
ZRANK、XREADGROUP CLAIM性能,并优化了带过期的集合命令。 - 预取增强:改进了预取逻辑和大小算法。
- 硬件利用率:ARM AArch64 系统现在默认使用硬件时钟以获得更好的性能。
- ACL 优化:优化了用户 ACL 权限验证,实现更快的访问控制。
- 向量操作:增强了向量集合操作,为 Intel、AMD 和 ARM 架构优化了距离计算。
- 系统效率:当硬件单调时钟可用时,通过重用缓存时间减少每次命令的系统调用。
复制改进
- 无盘复制:在无盘复制期间现在禁用 RDB 压缩以提高传输速度。
- 配置灵活性:
repl-diskless-load的新flushdb选项提供了对复制期间数据集处理的更好控制。
配置增强
Redis 8.6 引入了新的配置参数,提供对系统行为的更大控制:
- 流幂等性:
stream-idmp-duration和stream-idmp-maxsize控制幂等流生产的默认设置。 - TLS 身份验证:
tls-auth-clients-user启用基于证书的自动客户端身份验证。 - 内存策略:支持新的
volatile-lrm和allkeys-lrm逐出策略。 - 集群监控:
cluster-slot-stats-enabled启用按槽资源消耗统计收集。 - 内存分析:
key-memory-histograms启用按数据类型收集内存消耗直方图。
模块 API 增强
Redis 8.6 通过新的键元数据能力扩展了模块 API:
- RM_CreateKeyMetaClass:定义新的键元数据类,用于自定义数据组织。
- RM_ReleaseKeyMetaClass:在不再需要时释放键元数据类。
- RM_SetKeyMeta:为特定元数据类下的键附加或更新元数据值。
- RM_GetKeyMeta:检索特定元数据类下键的元数据值。
这些 API 使模块开发者能够将自定义元数据与 Redis 键关联,为高级数据管理和分析开辟了新的可能性。
增强的监控与指标
Redis 8.6 引入了新的指标,提供对系统行为的更深入洞察:
- 内存分布指标:新指标(
db0_distrib_lists_sizes、db0_distrib_sets_sizes、db0_distrib_hashes_sizes、db0_distrib_zsets_sizes)提供了不同数据类型间详细的内存使用分布。 - TLS 身份验证指标:
acl_access_denied_tls_cert跟踪失败的基于 TLS 证书的身份验证尝试,用于安全监控。
组件版本
Redis 8.6 继续采用统一分发方式,在单个 Redis 开源包中提供所有功能,无需单独的模块。这包括:
- RedisTimeSeries:增强 NaN 值支持和新的聚合器。
- RedisBloom:通过 RDB 加载修复和原子槽迁移支持改进了安全性。
- RedisJSON:更好的隐私保护和增强的原子槽迁移能力。
已知限制
使用 Redis 8.6 时,请注意以下当前限制:
Redis Search:在负载重平衡操作(如原子槽迁移)期间,由于节点之间的数据移动,游标可能会漏掉部分结果。
流幂等性:在
appendonly yes与aof-use-rdb-preamble no(非默认配置)组合使用时,避免使用带有新IDMP或IDMPAUTO选项的XADD。此限制将在下一个补丁版本中移除。