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、XDELEXstream 命令,支持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-targetAUTH 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 的权限审计流程。