编程 Valkey 9.2.0-rc1:无 fork RDB、Path Hash、ACL 角色与 B+ tree sorted set

2026-10-05 20:04:41

Valkey 9.2.0-rc1:无 fork RDB、Path Hash、ACL 角色与 B+ tree sorted set

  • 项目:valkey-io/valkey
  • Release:9.2.0-rc1
  • 状态:RC1 预发布,不是 GA;官方 release 标注 Wed 16 September 2026,GA 目标 11 月。
  • 升级紧急度:LOW。这是 Valkey 9.2.0 的第一个 release candidate。

行为变更

主动过期 keys 和 hash fields 现在会增加 dirty counter,因此 save points 和 BGSAVE 可能更频繁触发(#3118)。如果对快照频率、磁盘 IO 敏感,需要观察这一项带来的额外 BGSAVE。

新特性与增强

无 fork RDB 快照

新增 forkless RDB 快照,通过 forkless-infrastructure-enabled 和 bgsave-default-method 配置开启,并用新的 INFO persistence 字段报告保存方式和进度(#4460)。

开启分三步:

forkless-infrastructure-enabled yes
bgsave-default-method forkless

然后用:

INFO persistence

查看 save method 和 progress。

取舍:无 fork 路径能降低内存峰值,但写入吞吐会下降约 15%。它只影响 RDB 快照,不走 AOF rewrite。RC1 里还有两个未修复的粗糙点,生产上线前先按测试功能对待。

Path Hash 新数据类型

新增 Path Hash,底层是 radix tree,提供 PH* 命令,支持二进制安全路径上的精确查找、最长前缀匹配和前缀遍历(#4506)。

适用场景比较直接:API 路由、分层配置、CIDR 匹配、特性开关。需要按路径前缀聚合或查找时,比自己在 string/hash 上拼逻辑更省事。

ACL 角色与 ACL DIGEST

新增 ACL DIGEST,返回当前生效 ACL 规则的指纹,用来验证 ACL LOAD 实际应用了什么(#4446)。

ACL roles 则是可命名、可复用的 ACL selector 集合,用 ACL SETROLE/DELROLE/GETROLE/ROLES 管理,并通过 role: 分配给用户。角色可以出现在命令、ACL 文件和 valkey.conf 中(#3967)。

适用场景:多租户、运维权限分层、批量用户权限复用。配合 ACL DIGEST 做配置审计,能减少“文件已加载但权限不是预期”的问题。

Stream、TLS、脚本与 INCREX

  • 新增 XACKDEL、XDELEX stream 命令,支持 KEEPREF、DELREF、ACKED 模式,在 consumer group 不再需要消息后确认并删除(#4629)。
  • TLS 支持第二套服务端证书:tls-alt-cert-file、tls-alt-key-file、tls-alt-key-file-pass,例如 RSA 旁边挂后量子证书(#3717)。
  • 新增 maxmemory-scripts,限制缓存的 EVAL 脚本内存;SCRIPT LOAD 标记为 DENYOOM,受全局 maxmemory 限制(#866)。
  • 新增 INCREX,原子递增 key 的整数或浮点值,同时设置过期时间,支持 NX/XX 条件(#3253)。

LZ4 压缩

RDB 支持整文件 LZ4 压缩,通过 rdbcompression lz4 开启;默认的 per-string LZF 行为不变(#3531)。

稳态复制新增可选 LZ4 流压缩:

repl-compression

(#3853)

full-sync RDB payload 在设置 rdbcompression lz4 且每个 attaching replica 都声明支持时也会用 LZ4(#4075)。

取舍:LZ4 用 CPU 换带宽,适合跨机房、带宽紧张或 full sync 时间敏感的环境;如果 CPU 已经吃紧,先小流量验证。

热 key、复制限流与优先级客户端

  • 服务端热 key 检测:新增 HOTKEYS GET/RESET,设置 hotkeys-top-k 开启(#3708)。
  • 复制限流:repl-throttling-enabled 在副本落后时减慢客户端写入,避免断开连接和 full sync(#4356)。
  • 系统关键事件优先:cluster heartbeats、replication、slot migration 优先于重客户端流量,可用 priority-preemptive-poll-interval-us 调整(#4076)。
  • 预留管理连接槽位:priority-subnets 中 CIDR 范围的连接被标记为 prioritized,maxclients-reserved 把普通客户端上限压到 maxclients 减去预留数,INFO clients 中报告 connected_priority_clients(#4005)。

这些功能适合已经遇到复制积压、热 key 打爆单节点、或管理命令被业务流量挤掉的集群。

性能与效率

  • radix tree 子边查找使用 SIMD 优化的 memchr(),提升查找和插入速度(#3472)。
  • replica 一次从复制流中解析多条命令,提升副本处理速度(#3597)。
  • pubsub pattern 和 WATCH key 对象在订阅/监听同一名称的客户端之间共享,减少内存(#4072)。
  • 大 sorted set 改用 B+ tree,不再用 skiplist;OBJECT ENCODING 从 skiplist 变为 btree(#4359)。省内存,rank 类操作更快;运维脚本或监控如果断言 skiplist,需要改。
  • cluster-config-save-behavior 为 best-effort 时,用后台线程保存 cluster config 文件(#2555)。
  • 大 hashtable 编码 key 上的 HMGET、SMISMEMBER、ZMSCORE 使用批量查找加速(#4017)。
  • io-threads 开启时,对 hash、set、sorted set member 查找做内存预取(#3940)。
  • MEMORY PURGE 现在也会把 glibc main arena 的空闲页还给 OS(#3640)。
  • 命令传播到 replica 时,把每个命令的 RESP frame 批量写入单个 replication buffer(#4044)。
  • 精确 XTRIM MAXLEN = 0 约快 2.5 倍(#4161)。
  • 带 field expiration 的小 hash 使用内存更省的 listpack 编码,不再总是转 hashtable(#3212)。

命令与 API

  • MOVE 新增可选 REPLACE 参数(#2993)。
  • 新增 CONFIG INFO,返回配置元数据,如类型、flags、合法 enum 值、数值范围(#3050)。
  • SET 新增 IFNE,仅当当前值与给定比较值不同才设置(#3105)。
  • EXEC 支持 IFEQ、IFNE、NX、XX 条件,多 key 事务可不依赖 WATCH 做乐观锁(#4019)。
  • SISMEMBER 新增可选 XX,key 不存在时返回 -1(#2972)。
  • ZRANGE 家族新增 XX,区分 key 不存在时的 nil 和空结果(#2978)。

集群与复制

  • 集群副本会把 SCAN、FLUSHDB 等 keyless 命令重定向到 primary,条件是客户端带有 CAPA REDIRECT 且未发送 READONLY(#3505)。
  • cluster-replica-priority 让运维给副本排序,自动 failover 时优先选中的副本(#2204)。
  • 新增 FAILOVER_AUTH_NACK 消息,加速 split-vote failover 选举恢复(#3833)。
  • CLUSTER MIGRATESLOTS 支持 per-target AUTH username password(#3538)。
  • cluster-replica-no-failover 增加 if-empty:从未从 primary 收到数据的副本拒绝自动 failover,防止静默数据丢失(#4425)。

配置

  • commandlog-request-larger-than、commandlog-reply-larger-than 支持 10mb 这类内存单位(#2648)。
  • cluster-announce-ip 必须是合法 IP 地址或 hostname(#4055)。
  • 启动和 CONFIG SET 时拒绝空的 tls-ca-cert-dir(#3522)。
  • CONFIG REWRITE 保留 module load order(#3769)。

可观测性与日志

  • client memory 现在包含 watched key 和 pubsub channel/pattern 名称,可在 CLIENT INFO tot-mem 看到,并计入 maxmemory-clients(#3362)。
  • INFO replication 新增 last_successful_sync_duration_ms(#4197)。
  • CLUSTER INFO 新增 total_cluster_links_established_inbound/outbound 计数器(#4169)。
  • EXEC 事务总执行时间超过阈值时,记录到 slowlog 和 commandlog(#4267)。

RC1 的升级紧急度是 LOW,但仍是预发布版本。上测试环境时优先验证:forkless RDB 的吞吐和内存表现、rdbcompression lz4 与 repl-compression 的 CPU/带宽权衡、大 sorted set 的 OBJECT ENCODING 从 skiplist 到 btree 的监控兼容,以及 ACL roles 和 ACL DIGEST 的权限审计流程。

复制全文 生成海报 Valkey Redis 数据库 运维 RDB 快照

推荐文章

程序员茄子在线接单