该项目是在过渡到新的源可用许可证之前从开源 Redis 项目中分叉出来的。
本自述文件只是一个快速入门文档。更多详细信息可以在 valkey.io 下找到
Valkey 是一个高性能数据结构服务器,主要服务于键/值工作负载。它支持广泛的本机结构和可扩展的插件系统,用于添加新的数据结构和访问模式。
Makefile
构建 ValkeyValkey 可以在 Linux、OSX、OpenBSD、NetBSD、FreeBSD 上编译和使用。我们支持大端和小端架构,以及 32 位和 64 位系统。
它可以在 Solaris 派生系统(例如 SmartOS)上编译,但我们会尽最大努力支持该平台,并且不保证 Valkey 在 Linux、OSX 和 *BSD 中也能正常工作。
它很简单:
% make
要使用 TLS 支持进行构建,您需要 OpenSSL 开发库(例如 Debian/Ubuntu 上的 libssl-dev)。
将 TLS 支持构建为内置 Valkey:
% make BUILD_TLS=yes
要将 TLS 构建为 Valkey 模块:
% make BUILD_TLS=module
请注意,哨兵模式不支持 TLS 模块。
要使用实验性 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
上面运行了主要的集成测试。使用以下命令开始附加测试:
% make test-unit # Unit tests
% make test-modules # Tests of the module API
% make test-sentinel # Valkey Sentinel integration tests
% make test-cluster # Valkey Cluster integration tests
有关运行集成测试的更多信息可以在tests/README.md中找到,有关单元测试的更多信息,请参阅src/unit/README.md。
Valkey 有一些依赖项,这些依赖项包含在deps
目录中。即使依赖项的源代码中的某些内容发生更改, make
也不会自动重建依赖项。
当您使用git pull
更新源代码或以任何其他方式修改依赖关系树中的代码时,请确保使用以下命令以便真正清理所有内容并从头开始重建:
% make distclean
这将清理:jemalloc、lua、hiredis、linenoise 和其他依赖项。
此外,如果您强制使用某些构建选项,例如 32 位目标、无 C 编译器优化(用于调试目的)以及其他类似的构建时选项,则这些选项将无限期缓存,直到您发出make distclean
命令。
如果使用 32 位目标构建 Valkey 后需要使用 64 位目标重建它,或者反之亦然,则需要在 Valkey 发行版的根目录中执行make distclean
。
如果在尝试构建 32 位二进制 Valkey 时出现构建错误,请尝试以下步骤:
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,只需键入:
% 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 服务器(假设调用./gen-test-certs.sh
以便样本证书/密钥可用):
TLS 内置模式:
./src/valkey-server --tls-port 6379 --port 0
--tls-cert-file ./tests/tls/valkey.crt
--tls-key-file ./tests/tls/valkey.key
--tls-ca-cert-file ./tests/tls/ca.crt
TLS 模块模式:
./src/valkey-server --tls-port 6379 --port 0
--tls-cert-file ./tests/tls/valkey.crt
--tls-key-file ./tests/tls/valkey.key
--tls-ca-cert-file ./tests/tls/ca.crt
--loadmodule src/valkey-tls.so
请注意,您可以通过显式指定--port 0
来禁用 TCP。也可以同时使用 TCP 和 TLS,但您必须分配不同的端口。
使用valkey-cli
连接到 Valkey 服务器:
./src/valkey-cli --tls
--cert ./tests/tls/valkey.crt
--key ./tests/tls/valkey.key
--cacert ./tests/tls/ca.crt
指定--tls-replication yes
会使副本连接到主副本。
使用--tls-cluster yes
使 Valkey Cluster 跨节点使用 TLS。
请注意,Valkey Over RDMA 是一项实验性功能。它可能会在任何次要或主要版本中更改或删除。目前,仅在 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 (a new version iproute2 package)
或者:
% ibv_devices
您可以使用 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 二进制文件安装到 /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_<portnumber>
脚本来停止和启动 Valkey,例如/etc/init.d/valkey_6379
。
CMake
构建除了传统的Makefile
构建之外,Valkey 还支持使用CMake
替代实验性构建系统。
要构建并安装Valkey
,请在Release
模式(优化构建)下,在终端中输入以下内容:
mkdir build-release
cd $_
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/valkey
sudo make install
# Valkey is now installed under /opt/valkey
Valkey 的CMake
构建系统支持的其他选项:
-DBUILD_TLS=<on|off|module>
为 Valkey 启用 TLS 构建-DBUILD_RDMA=<off|module>
启用 RDMA 模块构建(仅支持模块模式)-DBUILD_MALLOC=<libc|jemalloc|tcmalloc|tcmalloc_minimal>
选择要使用的分配器。 Linux 上默认: jemalloc
,其他操作系统: libc
-DBUILD_SANITIZER=<address|thread|undefined>
构建并启用地址清理程序-DBUILD_UNIT_TESTS=[1|0]
设置后,构建将生成可执行的valkey-unit-tests
-DBUILD_TEST_MODULES=[1|0]
设置后,构建将包含位于tests/modules
文件夹下的模块-DBUILD_EXAMPLE_MODULES=[1|0]
设置后,构建将包含位于src/modules
文件夹下的示例模块-DCMAKE_BUILD_TYPE=<Debug|Release...>
定义构建类型,更多详细信息请参阅 CMake 手册-DCMAKE_INSTALL_PREFIX=/installation/path
覆盖此值以定义自定义安装前缀。默认值: /usr/local
-G<Generator Name>
生成“生成器名称”的构建文件。默认情况下,CMake 将生成Makefile
。 CMake
默认生成用户友好的彩色输出。如果您想查看更详细的输出,请使用以下命令:
make VERBOSE=1
在CMake
阶段, CMake
将变量缓存在名为CMakeCache.txt
的本地文件中。 Valkey 生成的所有变量一旦被消耗就会从缓存中删除(这是通过调用unset(VAR-NAME CACHE)
来完成的)。但是,某些变量(例如编译器路径)保留在缓存中。要开始全新构建,请从构建文件夹中删除缓存文件CMakeCache.txt
,或完全删除构建文件夹。
添加新源文件时重新运行CMake
非常重要。
在构建的CMake
阶段, CMake
生成一个名为compile_commands.json
的 JSON 文件,并将其放置在构建文件夹下。许多 IDE 和文本编辑器使用此文件来提供代码补全(通过clangd
)。
需要注意的是,这些工具将在 Valkey 的顶级文件夹下查找compile_commands.json
。常见的解决方法是创建指向它的符号链接:
cd /path/to/valkey/
# We assume here that your build folder is `build-release`
ln -sf $( pwd ) /build-release/compile_commands.json $( pwd ) /compile_commands.json
重新启动您的 IDE,瞧
请参阅 CONTRIBUTING.md。有关安全错误和漏洞,请参阅 SECURITY.md。
Valkey a Series of LF Projects, LLC 2810 N Church St, PMB 57274 Wilmington, Delaware 19802-4447