用途:Valkey 是开源、兼容 Redis 的内存数据存储,由 Linux 基金会维护,从 Redis OSS 7.2.4 分叉(BSD 3-Clause)。协议、命令与数据格式与 Redis OSS 2.x 至 7.2.x 兼容,可作为替代使用。适用缓存、会话存储、限流、发布订阅、任务队列、排行榜、分布式锁、实时计数等需要亚毫秒级键值操作的负载。不适用于作主关系型数据存储、超大对象(值大于 512 MB)、以及不经 Lua 脚本的多键强 ACID 事务负载。
主要能力:支持字符串、哈希、列表、集合、有序集合、Streams、HyperLogLog、位图、地理空间等数据结构。常见模式包括缓存旁路(GET 未命中后读库再 SET key val EX ttl,务必设 TTL)、会话存储(HSET session:{id} 字段值配合滑动 TTL)、固定窗口 INCR+EXPIRE 或有序集合滑动限流、分布式锁 SET lock:{res} token NX PX 30000(须设过期防死锁)、简单队列 LPUSH+BRPOP、可靠队列 Streams+XGROUP+XACK、发布订阅 SUBSCRIBE/PUBLISH(无持久化)、Streams 持久可重放、有序集合排行榜(ZADD/ZREVRANGE,O(log N))、HyperLogLog 去重计数(约 12 KB 内存、0.81% 误差)。淘汰策略常见配置 maxmemory-policy allkeys-lru。
使用方式:Docker 可用镜像 valkey/valkey:8.1-alpine,健康检查 valkey-cli ping。持久化可同时启用 AOF(appendonly yes)与 RDB 快照,AOF 用于持久性,RDB 用于备份。客户端可用 ioredis 或官方分叉 iovalkey,所有 Redis 客户端无需改动即可使用。从 Redis 迁移可替换二进制并保留数据文件,RDB/AOF 兼容至 Redis 7.2。
限制与注意事项:生产环境禁用 KEYS *,改用 SCAN 游标遍历;缓存键必须设 TTL,避免无界增长导致 OOM;删除大键用 UNLINK 异步删除;发布订阅不适合持久消息,需持久用 Streams 消费者组;所有键使用同一 TTL 会引发惊群,应加抖动;生产必须显式设置 maxmemory 与淘汰策略;勿用 MULTI/EXEC 做锁,应使用 SET ... NX PX;勿存大于 1 MB 的大对象,应存引用;Docker Compose 需加 valkey-cli ping 健康检查;生产须配置 requirepass 与 ACL 认证。其余具体配置与版本支持细节暂未提供。