官方信息表
| 项目 | 说明 |
|---|---|
| 项目名称 | Valkey |
| 一句话定位 | 高性能数据结构服务器,主要服务键值类负载 |
| 代码仓库 | valkey-io/valkey |
| 实现语言 | C |
| 官方网站 | valkey.io |
| 项目归属 | LF Projects, LLC 旗下开源社区项目 |
| 开源协议 | BSD 三条款 |
| 历史渊源 | 在 Redis 转向新源码可用协议之前,从开源 Redis 项目 fork 而来 |
配图

项目背景
Valkey 是一个高性能数据结构服务器,README 在“What is Valkey?”一节里写明:它“primarily serves key/value workloads”,主要服务键值类工作负载,同时支持广泛的原生数据结构,以及一个可扩展的插件系统,用来添加新的数据结构和访问模式。README 开头特别交代了它的来历:这个项目是在 Redis 转向新的“源码可用(source available)”许可证之前一刻,从开源 Redis 项目 fork 出来的。
这个背景决定了 Valkey 的身份:它和经典的 Redis 协议、数据结构、命令高度兼容,你可以把它理解为“社区维护的、完全开源自由的 Redis 分支”。对于那些因为许可证变化而希望留在完全 BSD 开源生态里的用户和云厂商,Valkey 是一个平滑的选择——大量原有基于 Redis 的客户端、运维脚本、配置文件都可以继续使用。
从服务器运维的角度看,Valkey 提供了一整套生产级能力:持久化、主从复制、Sentinel 哨兵高可用、Cluster 分片集群、可选的 TLS、RDMA、systemd 通知。它既可以当作一个轻量的缓存/会话存储跑在单机上,也可以组成多节点集群扛住高并发。README 本身只做快速上手,更完整的运维文档、性能仪表盘、命令参考都在 valkey.io。
在实际使用中,Valkey 的典型用法是:用 ./valkey-server 起一个默认监听 6379 端口的实例,然后用自带的 valkey-cli 连进去执行 SET、GET、HSET、LPUSH、ZADD 等命令。它支持 RDB 快照和 AOF 两种持久化方式,宕机重启后可以把数据恢复回来;主从复制让你把读流量分摊到多个副本,Sentinel 负责在主节点挂掉时自动把某个副本提升为新主,Cluster 则把数据分片到多个节点上突破单机内存上限。这些机制和 Redis 几乎一一对应,所以运维经验可以直接迁移。
跑起来后,常用的 valkey-cli 操作包括:PING 测连通性会返回 PONG;SET mykey hello 写入字符串;GET mykey 读回;HSET user:1 name zhangsan age 30 写一个哈希;LPUSH queue task1、RPOP queue 做简单队列;INFO 看服务器状态(内存、连接数、命中率);CONFIG GET maxmemory 看最大内存配置。生产上一般会先用 CONFIG SET maxmemory 限住内存上限,再配 maxmemory-policy 决定满了之后淘汰哪些 key,避免 Valkey 把系统内存吃光。
对运维来说,valkey-cli --stat 可以实时看 QPS、命中率、内存曲线;valkey-cli --latency 测客户端到服务器的延迟;valkey-cli --bigkeys 扫描找出占用内存最大的 key,做热点分析。这些内置工具省去了自己写监控脚本的麻烦。
整体上,Valkey 的定位就是一个“能直接当 Redis 用、但完全 BSD 开源”的高性能键值服务器:从单机缓存到主从、哨兵、分片集群,从明文到 TLS,从 jemalloc 到 RDMA,生产需要的能力它都具备。如果你或团队在意开源许可证的纯洁性,又不想放弃 Redis 那套熟悉的命令和运维习惯,Valkey 是当下最平滑的选择。
部署上最简单的方式就是编译后 ./valkey-server 直接起服务,它默认监听 6379;想要后台运行、开机自启,就用 utils/install_server.sh 配成守护进程。配合 valkey-cli 就能立刻开始读写数据,整条上手链路非常短。
从 README 给出的构建开关看,它在企业级选项上做得很细:BUILD_TLS 决定 TLS 是内置还是模块、USE_SYSTEMD 接入系统通知、USE_LIBBACKTRACE 让崩溃栈带文件名和行号、MALLOC 选择 jemalloc 还是 libc。这些开关面向的是真实生产环境,而不只是本地跑通。
在缓存、会话存储、消息队列、排行榜这些经典场景里,Valkey 都能直接上手:字符串做缓存、哈希存对象、列表做队列、有序集合做排行榜。它的命令和 Redis 完全一致,客户端也通用。
README 本身只是一份“快速上手”文档,更完整的资料都在 valkey.io。它支持在 Linux、macOS、OpenBSD、NetBSD、FreeBSD 上编译使用,支持大端和小端架构、32 位和 64 位系统;对 Solaris 系系统(如 SmartOS)是“尽力而为”支持,不保证和 Linux、macOS、*BSD 一样好用。
核心特性逐条翻译
README 把重点放在构建和运行上,下面把其中体现的能力逐条翻译并展开。
高性能键值服务器与丰富数据结构。 作为 Redis 的开源 fork,Valkey 继承了字符串、哈希、列表、集合、有序集合等原生数据结构,以及持久化、主从复制、Sentinel、Cluster 等一整套服务器能力。README 里的构建选项和运行命令,都是围绕“如何把这台服务器跑起来”展开的。
可扩展的插件系统。 README 在定位里强调 Valkey 有一个可扩展的插件系统,用来添加新的数据结构和访问模式;构建选项里也有 BUILD_LUA=no(不编译 Lua 引擎)、BUILD_ZSTD=yes(用 Zstandard 压缩流式 RDB 和复制)这类开关,体现出它的模块化取向。
TLS、RDMA、systemd 等企业级选项。 README 给出了丰富的构建开关:BUILD_TLS=yes 把 TLS 编进内置,BUILD_TLS=module 把 TLS 做成模块;BUILD_RDMA=yes/module 提供实验性 RDMA 支持;USE_SYSTEMD=yes 接入 systemd 通知;USE_LIBBACKTRACE=yes 让崩溃栈带文件名和行号。这些选项面向的是真实生产环境。
多种分配器与性能调优。 README 说明默认在 Linux 上用 jemalloc(因为它比 libc malloc 更少碎片问题),其他系统用 libc malloc;你也可以用 MALLOC=libc 或 MALLOC=jemalloc 强制指定。README 还介绍了默认使用处理器内部指令时钟(x86 上的 TSC、ARM 上的 CNTVCT)做单调计时,比 clock_gettime 快约 3 倍。
环境要求与部署
README 的构建方式非常直接:在仓库根目录执行 make 就能编译。下面把常用构建和部署方式翻译出来。
方式一:用 Makefile 编译(最常用)
make
要加 TLS 支持,需要 OpenSSL 开发库(Debian/Ubuntu 上是 libssl-dev),然后:
make BUILD_TLS=yes # TLS 内置
make BUILD_TLS=module # TLS 作为模块(注意 Sentinel 模式不支持 TLS 模块)
其他常用开关:BUILD_RDMA=yes 启用实验性 RDMA(需 librdmacm-dev、libibverbs-dev);USE_SYSTEMD=yes 接入 systemd;BUILD_LUA=no 不编译 Lua 引擎;make 32bit 编译 32 位二进制。编译完成后建议跑测试:
make test # 主集成测试
make test-unit # 单元测试
make test-cluster # Cluster 集成测试
README 还提供了 Sentinel 和模块的测试入口(make test-sentinel、make test-modules),以及 Zstandard 流式压缩(BUILD_ZSTD=yes,需要 Zstandard 1.4.7 以上)。这些开关让你可以按生产环境的实际需要裁剪:需要 TLS 就开 TLS,需要 systemd 通知就接 systemd,不需要 Lua 脚本引擎就关掉以减小体积。
如果改了源码或依赖,README 提醒要先 make distclean 清理 jemalloc、lua、libvalkey、linenoise 等依赖,否则缓存的构建选项会一直生效。
方式二:安装到系统并以后台服务运行
README 说明 make install 会把二进制装进 /usr/local/bin(也可以用 make PREFIX=/some/dir install 指定目录),并为了和 Redis 兼容,会创建从 redis-server、redis-cli 等名字到 Valkey 二进制的符号链接。如果要在 Ubuntu/Debian 上把它配置成开机自启的后台守护进程,README 提供了脚本:
cd utils
./install_server.sh
这个脚本会问你几个问题,然后把 Valkey 配成后台守护进程,重启后自动拉起;之后你可以用 /etc/init.d/valkey_<端口号>(例如 /etc/init.d/valkey_6379)来停止和启动它。README 提醒这个脚本只在 Linux 上工作,macOS 上不行。
方式三:用 CMake(实验性)
除了传统 Makefile,Valkey 还提供实验性的 CMake 构建:
mkdir build-release && cd build-release
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/valkey
sudo make install
支持的选项包括 -DBUILD_TLS、-DBUILD_RDMA、-DBUILD_ZSTD、-DBUILD_MALLOC(libc/jemalloc/tcmalloc)等,详见 README 的 CMake 章节。
使用方法
编译完成后,用默认配置直接启动服务器:
cd src
./valkey-server
要指定配置文件,把路径作为参数传进去:
./valkey-server /path/to/valkey.conf
也可以直接在命令行覆盖配置项,例如:
./valkey-server --port 9999 --replicaof 127.0.0.1 6379
./valkey-server /etc/valkey/6379.conf --loglevel debug
README 说明 valkey.conf 里的所有选项都能以同名命令行参数传递。启动后另开一个终端,用 valkey-cli 连上去玩:
cd src
./valkey-cli
valkey> ping
PONG
valkey> set foo bar
OK
valkey> get foo
"bar"
valkey> incr mycounter
(integer) 1
valkey> incr mycounter
(integer) 2
这个 ping 返回 PONG、set/get 存取字符串、incr 做计数的小流程,是任何键值服务器最经典的冒烟测试:它能跑通,就说明服务器起来了、客户端能连、读写正常。对于从 Redis 迁移过来的用户,这些命令几乎是肌肉记忆,零学习成本。
如果你用 TLS 启动,README 给出了配套的 valkey-cli --tls 连接方式,并说明可以用 --tls-replication yes 让副本连接主节点、用 --tls-cluster yes 让 Cluster 节点之间走 TLS。
对于要做高可用的生产环境,README 还提供了 Sentinel 集成测试(make test-sentinel)和 Cluster 集成测试(make test-cluster),以及 RDMA 实验性支持(BUILD_RDMA=yes,目前只支持 Linux)。这些能力意味着 Valkey 不只是一个单机缓存,而是可以组成主从、哨兵、分片集群的完整数据服务器。
从“为什么用 Valkey”的角度看,它最大的价值是:在 Redis 许可证变化之后,给社区和云厂商提供了一个完全 BSD、协议兼容的延续。如果你现有的系统是围绕 Redis 客户端、命令、配置构建的,迁移到 Valkey 的成本非常低——README 甚至在 make install 时主动创建 redis-server、redis-cli 的符号链接,就是为了让旧脚本无需修改就能继续工作。
对于服务器运维人员,Valkey 的定位很清晰:它是一个可以直接替换 Redis 的开源数据服务器,构建、运行、高可用、TLS、集群一应俱全。你可以从单机 ./valkey-server 开始试水,再逐步用 Sentinel 或 Cluster 扩展到生产规模,整个过程和你熟悉的 Redis 运维几乎一致。
日常运维中,你最常做的就是:编译、用 ./utils/install_server.sh 把它装成开机自启服务、然后用 valkey-cli 连上去看数据、调配置。README 强调 valkey.conf 里的所有配置项都能在命令行同名覆盖,这让临时调试非常方便——你不需要改配置文件再重启,直接 ./valkey-server --port 9999 --loglevel debug 就能起一个临时实例。
对于生产部署,README 还提到 make install 只会把二进制装进系统,不会自动配 init 脚本和配置文件;如果你只是本地玩一玩,这无所谓,但要在生产环境把它当后台服务跑,就该用 utils/install_server.sh 把它配成随系统启动的守护进程,再用 /etc/init.d/valkey_<端口> 管理启停。
README 还提醒,make install 创建的 Redis 风格符号链接在 make uninstall 时会被移除;如果你不想创建这些兼容符号链接,可以用 make PREFIX=/some/directory install 或设置 USE_REDIS_SYMLINKS=no。这种细节说明它在设计时认真考虑了从 Redis 迁移过来的运维习惯。
常见问题(FAQ)
问:Valkey 和 Redis 是什么关系?能直接替换吗? README 说明它是在 Redis 转向新许可证之前从开源 Redis fork 出来的,和经典 Redis 协议、数据结构、命令高度兼容;make install 还会创建 redis-server、redis-cli 等符号链接以兼容现有部署。
问:怎么编译 Valkey? README 最直接的方式就是在仓库根目录执行 make;要 TLS 就先装 OpenSSL 开发库再 make BUILD_TLS=yes;编译完用 make test 跑测试;make install 装到 /usr/local/bin。
问:怎么把它配成开机自启的服务? README 提供了 utils/install_server.sh,在 Ubuntu/Debian 上运行它会把 Valkey 配成后台守护进程,之后用 /etc/init.d/valkey_<端口> 启停;注意这个脚本只支持 Linux。
问:修改源码后重新编译为什么不生效? README 提醒 make 不会自动重建依赖,如果 git pull 或改了依赖目录,必须先 make distclean 清理 jemalloc、lua、linenoise 等,再重新 make;强制的构建选项也会被缓存,直到 make distclean。
问:Valkey 默认用什么内存分配器? README 说明在 Linux 上默认用 jemalloc(碎片更少),其他系统用 libc malloc;可以用 make MALLOC=libc 强制用 libc,或在 macOS 上用 make MALLOC=jemalloc 强制用 jemalloc。
问:Valkey 是什么许可证? Valkey 是 LF Projects, LLC 旗下的开源社区项目,采用 BSD 三条款许可证,完全自由开源,适合对许可证友好性有要求的生产环境。
问:Valkey 支持 TLS 吗?怎么开? README 说明需要先装 OpenSSL 开发库(Debian/Ubuntu 是 libssl-dev),然后 make BUILD_TLS=yes 内置或 make BUILD_TLS=module 做成模块;运行时用 --tls-port、--tls-cert-file 等参数指定证书,用 valkey-cli --tls 连接。注意 Sentinel 模式不支持 TLS 模块。
问:Valkey 的性能怎么观察? README 提供了 性能仪表盘,可以跨版本对比吞吐量趋势,还有一个 unstable 分支的实时仪表盘,帮贡献者快速发现性能回退。
跳转链接
- 官方代码仓库:valkey-io/valkey
- 官方网站与文档:valkey.io
- 性能仪表盘:valkey.io/performance
- 贡献指南:CONTRIBUTING.md
- 安全说明:SECURITY.md
- 集成测试说明:tests/README.md
- 性能仪表盘(unstable):perf-dashboard.valkey.io