該專案是在過渡到新的來源可用授權之前從開源 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