这份README正在建设中,我们正在努力构建一个新的社区驱动的高性能键值存储。
本项目是在Redis项目转向新的源代码可用许可证之前从开源Redis项目分叉而来的。
这份README只是一个快速入门文档。我们目前正在制作一个更加完整的文档页面。
什么是Valkey?
Valkey是一个高性能数据结构服务器,主要用于处理键/值工作负载。 它支持广泛的原生结构和可扩展的插件系统,用于添加新的数据结构和访问模式。
构建Valkey
Valkey可以在Linux、OSX、OpenBSD、NetBSD和FreeBSD上编译和使用。 我们支持大端和小端架构,以及32位和64位系统。
它可能可以在Solaris衍生系统(例如SmartOS)上编译,但我们对这个平台的支持是"尽力而为"的,Valkey不能保证在这些系统上像在Linux、OSX和*BSD上那样运行良好。
构建过程非常简单:
% make
要构建带TLS支持的版本,你需要OpenSSL开发库(例如Debian/Ubuntu上的libssl-dev)并运行:
% make BUILD_TLS=yes
要构建带实验性RDMA支持的版本,你需要RDMA开发库(例如Debian/Ubuntu上的librdmacm-dev和libibverbs-dev)。目前,Valkey仅支持RDMA作为连接模块模式。运行:
% make BUILD_RDMA=module
要构建带systemd支持的版本,你需要systemd开发库(例如Debian/Ubuntu上的libsystemd-dev或CentOS上的systemd-devel)并运行:
% make USE_SYSTEMD=yes
要为Valkey程序名称添加后缀,使用:
% make PROG_SUFFIX="-alt"
你可以构建32位的Valkey二进制文件,使用:
% make 32bit
构建Valkey后,最好进行测试:
% make test
如果构建了TLS支持,可以启用TLS运行测试(你需要安装tcl-tls):
% ./utils/gen-test-certs.sh
% ./runtest --tls
修复依赖项或缓存的构建选项导致的构建问题
Valkey有一些依赖项,它们包含在deps目录中。即使依赖项的源代码发生变化,make也不会自动重新构建依赖项。
当你使用git pull更新源代码时,或者当依赖项树中的代码以任何其他方式被修改时,请确保使用以下命令来彻底清理所有内容并从头开始重新构建:
% make distclean
这将清理:jemalloc、lua、hiredis、linenoise和其他依赖项。
另外,如果你强制使用某些构建选项,如32位目标、无C编译器优化(用于调试目的)和其他类似的构建时选项,这些选项会被无限期缓存,直到你执行make distclean命令。
修复构建32位二进制文件的问题
如果在构建32位目标的Valkey后,你需要重新构建64位目标,或者反之,你需要在Valkey分发的根目录中执行make distclean。
如果在尝试构建32位Valkey二进制文件时遇到构建错误,请尝试以下步骤:
- 安装libc6-dev-i386包(也可以尝试g++-multilib)。
- 尝试使用以下命令行代替make 32bit: make CFLAGS="-m32 -march=native" LDFLAGS="-m32"
内存分配器
在构建Valkey时选择非默认内存分配器是通过设置MALLOC环境变量来完成的。默认情况下,Valkey编译并链接到libc malloc,但在Linux系统上默认使用jemalloc。选择这个默认值是因为jemalloc已经证明比libc malloc有更少的内存碎片问题。
要强制编译使用libc malloc,使用:
% make MALLOC=libc
要在Mac OS X系统上编译使用jemalloc,使用:
% make MALLOC=jemalloc
单调时钟
默认情况下,Valkey将使用POSIX clock_gettime函数作为单调时钟源。在大多数现代系统上,可以使用内部处理器时钟来提高性能。相关注意事项可以在这里找到: http://oliveryang.net/2015/09/pitfalls-of-TSC-usage/
要构建支持处理器内部指令时钟的版本,使用:
% make CFLAGS="-DUSE_PROCESSOR_CLOCK"
详细构建输出
默认情况下,Valkey将以用户友好的彩色输出进行构建。 如果你想看到更详细的输出,请使用以下命令: % make V=1
运行 Valkey
要使用默认配置运行 Valkey,只需输入:
% cd src
% ./valkey-server
如果你想提供自己的 valkey.conf,则需要使用一个额外的参数(配置文件的路径)来运行:
% cd src
% ./valkey-server /path/to/valkey.conf
也可以通过在命令行中直接传递参数作为选项来更改 Valkey 配置。例如:
% ./valkey-server --port 9999 --replicaof 127.0.0.1 6379
% ./valkey-server /etc/valkey/6379.conf --loglevel debug
valkey.conf 中的所有选项也都支持作为命令行选项使用,名称完全相同。
使用 TLS 运行 Valkey:
请查阅 TLS.md 文件,了解更多关于如何使用 TLS 运行 Valkey 的信息。
使用 RDMA 运行 Valkey:
请注意,基于 RDMA 的 Valkey 是一项实验性功能。 它可能会在任何次要或主要版本中被更改或移除。 目前仅支持在 Linux 上使用。
要手动以 RDMA 模式运行 Valkey 服务器:
% ./src/valkey-server --protected-mode no \
--loadmodule src/valkey-rdma.so bind=192.168.122.100 port=6379
可以通过运行时命令更改 RDMA 的绑定地址/端口:
192.168.122.100:6379> CONFIG SET rdma.port 6380
也可以同时使用 RDMA 和 TCP,TCP(6379) 和 RDMA(6379) 之间不会冲突,例如:
% ./src/valkey-server --protected-mode no \
--loadmodule src/valkey-rdma.so bind=192.168.122.100 port=6379 \
--port 6379
注意,网卡(本例中的 192.168.122.100)应该支持 RDMA。要测试服务器是否支持 RDMA:
% rdma res show (需要新版本的 iproute2 包)
或:
% ibv_devices
使用 Valkey
你可以使用 valkey-cli 来操作 Valkey。启动一个 valkey-server 实例,然后在另一个终端中尝试以下操作:
% 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
valkey>
安装 Valkey
要将 Valkey 二进制文件安装到 /usr/local/bin,只需使用:
% make install
如果你希望使用其他目标目录,可以使用 make PREFIX=/some/other/directory install
。
注意:为了与 Redis 兼容,我们会从 Redis 名称(redis-server
、redis-cli
等)创建符号链接到 make install
安装的 Valkey 二进制文件。
符号链接创建在与 Valkey 二进制文件相同的目录中。
使用 make uninstall
时会删除这些符号链接。
可以通过设置 makefile 变量 USE_REDIS_SYMLINKS=no
来跳过创建符号链接。
make install
只会在你的系统中安装二进制文件,但不会在适当的位置配置初始化脚本和配置文件。如果你只是想稍微尝试一下 Valkey,这并不需要,但如果你要为生产系统正确安装它,我们有一个适用于 Ubuntu 和 Debian 系统的脚本:
% cd utils
% ./install_server.sh
注意:install_server.sh
不适用于 Mac OSX;它只为 Linux 设计。
该脚本会询问你一些问题,并设置运行 Valkey 所需的一切,使其作为后台守护进程正常运行,并在系统重启时自动启动。
你可以使用名为 /etc/init.d/valkey_<端口号>
的脚本来停止和启动 Valkey,例如 /etc/init.d/valkey_6379
。
代码贡献
请参阅 CONTRIBUTING.md。对于安全漏洞和漏洞,请参阅 SECURITY.md。
Valkey 是 LF Projects 下的一个开放社区项目
Valkey 是 LF Projects, LLC 的一个系列项目 2810 N Church St, PMB 57274 Wilmington, Delaware 19802-4447