什么是 Valkey
Valkey 是一个高性能的键值对内存数据库,支持丰富的数据结构,适用于缓存、消息队列、会话存储等多种场景。
背景:Valkey 是 Redis 的开源分支(BSD 许可证),在 Redis 更改许可证后由 Linux 基金会社区维护。API 完全兼容,可直接替换使用。
核心特性
- 丰富的数据结构:String、Hash、List、Set、Sorted Set、Stream、Bitmap、HyperLogLog 等
- 内存存储 + 持久化:数据主要在内存中运行,同时支持 RDB 快照和 AOF 日志持久化
- 高性能:单线程模型避免锁竞争,单机可支撑 10 万+ QPS
- 发布/订阅:内置 Pub/Sub 消息机制,支持 Pattern 匹配订阅
- Lua 脚本:支持原子性执行 Lua 脚本,保证复杂操作的事务性
- 集群模式:原生支持数据分片和自动故障转移
- 模块系统:可通过 C 语言编写模块扩展功能(如 RediSearch、RedisJSON)
典型应用场景
| 场景 | 说明 | 数据结构 |
|---|---|---|
| 缓存 | 减轻数据库压力,加速热点数据读取 | String / Hash |
| 会话存储 | 分布式 Session 管理,支持 TTL 自动过期 | String / Hash |
| 排行榜 | 实时排名系统,支持分数更新和范围查询 | Sorted Set |
| 消息队列 | 轻量级任务队列,支持消费者组 | Stream / List |
| 分布式锁 | 多节点互斥访问共享资源 | String (SET NX) |
| 计数器 | 文章阅读量、点赞数等实时统计 | String (INCR) |
架构概览
Valkey 采用单线程事件循环模型(I/O 线程可选多线程),核心架构包括:
- 事件循环:基于 epoll/kqueue 的 I/O 多路复用,处理客户端连接和命令执行
- 内存管理:使用 jemalloc 分配器,减少内存碎片;通过
maxmemory策略控制内存上限 - 持久化引擎:RDB 通过 fork 子进程生成快照,AOF 记录每条写命令并在重启时重放
- 复制机制:主从异步复制,支持级联复制和部分重同步(PSYNC)
快速体验
安装完成后,通过命令行客户端连接并执行基本操作:
bash复制
$ valkey-cli 127.0.0.1:6379> SET mykey "Hello Valkey" OK 127.0.0.1:6379> GET mykey "Hello Valkey" 127.0.0.1:6379> INCR counter (integer) 1 127.0.0.1:6379> INCR counter (integer) 2 127.0.0.1:6379> TTL mykey (integer) -1
安全提示:默认配置下 Valkey 不设置密码且监听所有网络接口。生产环境务必配置 requirepass 和 bind 参数。
与 Redis 的关系
Valkey 是 Redis 7.2 的直接分支,保持了完整的命令兼容性和数据格式兼容。主要区别:
- Valkey 由 Linux 基金会管理,采用 OSI 认可的开源许可证
- 社区驱动开发,接受外部贡献的流程更加透明
- 性能优化持续进行,部分场景下比 Redis 7.2 有 5-10% 的提升
- 所有现有 Redis 客户端和工具均可无缝连接 Valkey