前言
在此,不讨论协议变更所引发的种种,只做学习
⚡️2024年3月20日,Redis Labs宣布从Redis 7.4开始,将原先比较宽松的BSD
源码使用协议修改为RSAv2
和SSPLv1
协议。点我查看Redis协议许可修改页。
⚡️之后, PlaceholderKV的建立, 基金会宣布打算成立Valkey
,这是 Redis 内存中 NoSQL 数据存储的开源替代品。项目贡献者迅速聚集了维护者、社区和企业支持,重新组合,以响应Redis Inc.最近宣布的许可证变更。Valkey将继续在 Redis 7.2.4 上进行开发,并将保持该项目在开源 Berkeley Software 下可供使用和分发分发 (BSD) 3 条款许可证。
⚡️随后,Linux 基金会内的新名称和 Valkey
的形成、来自世界各地的社区成员的数百次代码更新以及候选版本。这些都在大约三周的时间内完成。
⚡️由此,Valkey
它诞生了。Valkey的Github地址,在Github该项目页面上,也描述着,项目代码是在过渡到新的源可用许可证之前从开源 Redis 项目中分叉出来的。Valkey 是一个高性能数据结构服务器,主要服务于键/值工作负载。它支持广泛的本机结构和可扩展的插件系统,用于添加新的数据结构和访问模式。
在2024年9月16日
,Valkey已经正式发布:Valkey 8.0.0
版本,本文安装的是它的小版本更新的Valkey 8.0.1
,以单机模式进行安装。
文章目录
一、Github Tags页下载安装包
安装包,可以从Github的tags页下载valkey-8.0.1.tar.gz
二、上传压缩包到服务器、修改配置文件、启动
1.上传压缩包
自我约定:软件都放在
/app
下
# 创建存放valkey文件夹,上传压缩包
mkdir /app/valkey
# 解压valkey-8.0.1.tar.gz
tar -zxvf valkey-8.0.1.tar.gz
# 随后进入valkey-8.0.1文件,查看里面的内容。
cd valkey-8.0.1
# 是不是很熟悉,熟悉就对了,有redis那味了嗷~
2.下载make、gcc命令,并且编译、测试、安装
✌️和redis
一样,我们下载的valkey
是它的字节码文件,需要使用make
进行编译
make 是一个自动化构建工具,通常用于编译和构建源代码。它通过读取 Makefile 文件来执行特定的构建命令,帮助开发者自动化编译、链接以及其他构建任务。make 在 C/C++ 等开发语言中非常常见,但也可以用于其他需要自动化构建的项目。
# 在服务器上安装make、gcc命令
yum install -y make gcc
# 安装完成后,在/app/valkey/valkey-8.0.1/src下,执行make命令
cd /app/valkey/valkey-8.0.1/src
# 开始编译
make
# 耐心等待,之后会提示如下。
...
Hint: It's a good idea to run 'make test' ;)
# 之后可以make test测试下,发现了这个tcl东西。
[root@localhost src]# make test
CC Makefile.dep
You need tcl 8.5 or newer in order to run the Valkey test
make: *** [Makefile:573: test] Error 1
⚠️以下这些步骤,可以跳过,但是因为是第一次安装,所以都试一下。不得不说,这个make test
确实挺久的,我虚拟机4核心4线程8G内存,跑了十几分钟
Valkey 可能使用 Tcl 来执行一些测试任务或者作为其构建和测试框架的一部分。通常情况下,Tcl 被用作:
👏自动化脚本:用于自动化测试、构建、部署等任务。
👏嵌入式脚本语言:如果 Valkey 项目是用 C 或 C++ 开发的,Tcl 可能被嵌入到程序中来执行一些动态脚本任务。
👏测试框架:Tcl 可以作为一种轻量级的脚本语言,来控制和执行单元测试或集成测试。
# 先看看本地的这个版本是什么
[root@localhost src]# tclsh --version
-bash: tclsh: command not found
# 没有,那就安装一下吧
yum install -y tcl
# 等待安装,安装完成后,再进行make test,再耐心等待,有124项
[107/124 done]: unit/cluster/slave-selection (106 seconds)
⚡️⚡️⚡️开始安装⚡️⚡️⚡️
# 之后,开始安装
cd /app/valkey/valkey-8.0.1/src
make install
[root@localhost src]# make install
Hint: It's a good idea to run 'make test' ;)
Hint: It's a good idea to run 'make test' ;)
INSTALL valkey-server
INSTALL valkey-benchmark
INSTALL valkey-cli
INSTALL SYMLINK redis-server -> valkey-server
INSTALL SYMLINK redis-cli -> valkey-cli
INSTALL SYMLINK redis-benchmark -> valkey-benchmark
INSTALL SYMLINK redis-check-rdb -> valkey-check-rdb
INSTALL SYMLINK redis-check-aof -> valkey-check-aof
INSTALL SYMLINK redis-sentinel -> valkey-sentinel
🎉🎉🎉安装完成🎉🎉🎉
3.修改配置文件
✳️ 我们这里,进行单机模式部署,需要修改valkey.conf
即可,sentinel.conf是集群的配置。
😏编辑valkey.conf
时,有意思的是,我发现valkey
的端口和redis
也是一样的默认是6379
。如果彦祖你和redis混用
的话,记得把端口也改下,不然启不启来。
😳行吧,咱们继续
vim valkey.conf
# 第88行,注释bind,运行远程登录
# bind 127.0.0.1 -::1
# 第112行,禁用保护模式,protected-mode yes 改为 protected-mode no
protected-mode no
# 第308行,配置 Redis 作为后台守护进程运行,daemonize no 改为 daemonize yes
daemonize yes
# 第1081行,修改登录密码为:ikun2.5amagi
requirepass ikun2.5amagi
# 之后退出保存
:wq
4.单机后台启动
⚡️⚡️⚡️激动人心的时刻,启动Valkey
⚡️⚡️⚡️
# 启动命令
/app/valkey/valkey-8.0.1/src/valkey-server /app/valkey/valkey-8.0.1/valkey.conf &
# 回车后,会看到如下日志
[root@localhost valkey-8.0.1]# /app/valkey/valkey-8.0.1/src/valkey-server /app/valkey/valkey-8.0.1/valkey.conf &
[1] 49973
[root@localhost valkey-8.0.1]# 49973:C 25 Nov 2024 18:39:00.735 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
49973:C 25 Nov 2024 18:39:00.735 * oO0OoO0OoO0Oo Valkey is starting oO0OoO0OoO0Oo
49973:C 25 Nov 2024 18:39:00.735 * Valkey version=8.0.1, bits=64, commit=00000000, modified=0, pid=49973, just started
49973:C 25 Nov 2024 18:39:00.735 * Configuration loaded
49973:M 25 Nov 2024 18:39:00.735 * Increased maximum number of open files to 10032 (it was originally set to 1024).
49973:M 25 Nov 2024 18:39:00.735 * monotonic clock: POSIX clock_gettime
.+^+.
.+#########+.
.+########+########+. Valkey 8.0.1 (00000000/0) 64 bit
.+########+' '+########+.
.########+' .+. '+########. Running in standalone mode
|####+' .+#######+. '+####| Port: 6379
|###| .+###############+. |###| PID: 49973
|###| |#####*'' ''*#####| |###|
|###| |####' .-. '####| |###|
|###| |###( (@@@) )###| |###| https://valkey.io
|###| |####. '-' .####| |###|
|###| |#####*. .*#####| |###|
|###| '+#####| |#####+' |###|
|####+. +##| |#+' .+####|
'#######+ |##| .+########'
'+###| |##| .+########+'
'| |####+########+'
+#########+'
'+v+'
49973:M 25 Nov 2024 18:39:00.738 * Server initialized
49973:M 25 Nov 2024 18:39:00.738 * Ready to accept connections tcp
# 查看valkey进程,可以看到,已经成功运行了
[root@localhost valkey-8.0.1]# ps -ef|grep valkey
root 49973 1897 0 18:39 pts/0 00:00:00 /app/valkey/valkey-8.0.1/src/valkey-server 127.0.0.1:6379
root 49979 1897 0 18:39 pts/0 00:00:00 grep --color=auto valkey
三、将Valkey注册为系统服务
目的是为了:
👏每次重启服务器,能够自动连接。
👏方便一行命令启动,不用敲那么多。
使用以下命令创建名为valkey.service
的文件
# 创建名为valkey.service的文件
vim /etc/systemd/system/valkey.service
⭐️⭐️⭐️以下为完整的valkey.service
内容⭐️⭐️⭐️
[Unit]
Description=Valkey Server
After=network.target
[Service]
Type=forking
ExecStart=/app/valkey/valkey-8.0.1/src/valkey-server /app/valkey/valkey-8.0.1/valkey.conf
Restart=on-failure
WorkingDirectory=/app/valkey/valkey-8.0.1/
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
[Install]
WantedBy=multi-user.target
保存后,重新加载系统配置
# 重新加载 systemd 配置
systemctl daemon-reload
# 设置服务开机启动
systemctl enable valkey
# 启动服务
systemctl start valkey
# 查看状态
systemctl status valkey
检查下,Valkey
是否正常运行
ps -ef|grep valkey
# 或者
systemctl status valkey
# 再检查下valkey.service的日志50行,命令
journalctl -u valkey.service -n 50
日志显示
Nov 25 19:30:47 localhost.localdomain systemd[50397]: valkey.service: Failed to locate executable /app/valkey/valkey-8.0.1/src/valkey-server: Permission denied
出现这种问题,可能是SELinux 限制
将 SELINUX=enforcing
改为 SELINUX=disabled
,然后保存并重启系统。
# 禁用 SELinux
vim /etc/selinux/config
# 修改完后,重启系统
reboot
# 然后重启Valkey
systemctl start valkey
# 查看状态,此时
systemctl status valkey
# 可以看到如下 Active: active (running) 运行中
[root@localhost ~]# systemctl status valkey
● valkey.service - Valkey Server
Loaded: loaded (/etc/systemd/system/valkey.service; enabled; preset: disabled)
Active: active (running) since Mon 2024-11-25 21:30:49 CST; 1s ago
Process: 1626 ExecStart=/app/valkey/valkey-8.0.1/src/valkey-server /app/valkey/valkey-8.0.1/valkey.conf (code=exited, status=0/SUCCESS)
Main PID: 1628 (valkey-server)
Tasks: 6 (limit: 48698)
Memory: 7.2M
CPU: 24ms
CGroup: /system.slice/valkey.service
└─1628 "/app/valkey/valkey-8.0.1/src/valkey-server *:6379"
Nov 25 21:30:49 localhost.localdomain systemd[1]: Starting Valkey Server...
Nov 25 21:30:49 localhost.localdomain systemd[1]: Started Valkey Server.
四.使用客户端工具连接
Valkey既然和Redis是同源,那使用Redis 的连接工具,是否能连接成功?
使用 Another Redis Desktop Manager
连接工具,进行连接,发现确实能够连接得上,只是对应的版本,是Redis7.2.4
,也是这个从这个版本开始fork代码的。
总结
先从Github Tags页下载安装包后,上传至服务器并修改配置文件、启动。
再将Valkey注册为系统服务
😆最后使用客户端工具连接
😳在想,后续应该会有挺多的连接框架,能够适配Valkey,虽然现在使用Redis的连接工具、框架也可以。
相关资讯:
Valkey官网
Valkey的Github
AnotherRedisDesktopManager的Github
👏👏👏文章更新 2025年4月28日
在2025年4月23日的时候,最新版的Vlakey也是更新到了8.1.1
1.依旧去github下载最新版的8.1.1
,之后将包直接丢到服务器上的/app/valkey
目录下
# 解压缩最新的Valkey-8.1.1包
tar -zxvf /app/valkey/valkey-8.1.1.tar.gz
2.备份单机备份文件,并将原来valkey-8.0.1的valkey.conf
拷贝到valkey-8.1.1
下,完成配置文件的修改
cd /app/valkey/valkey-8.1.1
mv valkey.conf valkey.conf.bak_20250428
cp /app/valkey/valkey-8.0.1/valkey.conf /app/valkey/valkey-8.1.1
3.编译
cd /app/valkey/valkey-8.1.1/src
make && install
... 继续稍等片刻 ...
看到valkey-server
出现,说明已经编译完成。
4.修改
service服务
# 创建名为valkey.service的文件
vim /etc/systemd/system/valkey.service
⭐️⭐️⭐️以下为完整的valkey.service
内容⭐️⭐️⭐️
[Unit]
Description=Valkey Server
After=network.target
[Service]
Type=forking
ExecStart=/app/valkey/valkey-8.1.1/src/valkey-server /app/valkey/valkey-8.1.1/valkey.conf
Restart=on-failure
WorkingDirectory=/app/valkey/valkey-8.1.1/
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
[Install]
WantedBy=multi-user.target
保存后,重新加载系统配置
# 重新加载 systemd 配置
systemctl daemon-reload
# 设置服务开机启动
systemctl enable valkey
# 启动服务
systemctl start valkey
# 查看状态
systemctl status valkey
检查下,Valkey
是否正常运行
ps -ef|grep valkey
# 或者
systemctl status valkey
# 再检查下valkey.service的日志50行,命令
journalctl -u valkey.service -n 50
日志显示
Apr 28 16:46:29 localhost.localdomain systemd[1]: Starting Valkey Server...
Apr 28 16:46:29 localhost.localdomain systemd[1]: Started Valkey Server.
5.查看版本号
cd /app/valkey/valkey-8.1.1/src
./valkey-cli
# 之后登录
127.0.0.1:6379> AUTH ikun2.5amagi
# 查看版本
127.0.0.1:6379> INFO server
# Server
redis_version:7.2.4
server_name:valkey
valkey_version:8.1.1 # 升级成功,版本号在这
valkey_release_stage:ga
redis_git_sha1:00000000
redis_git_dirty:1
redis_build_id:2b527497763ccbb7
server_mode:standalone
os:Linux 5.14.0-503.19.1.el9_5.x86_64 x86_64
arch_bits:64
monotonic_clock:POSIX clock_gettime
multiplexing_api:epoll
gcc_version:11.5.0
process_id:10933
process_supervised:no
run_id:fdd863d73aabf627dbe0a6fef801a39a3321069d
tcp_port:6379
server_time_usec:1745830338090137
uptime_in_seconds:349
uptime_in_days:0
hz:10
configured_hz:10
clients_hz:10
lru_clock:999874
executable:/app/valkey/valkey-8.1.1/src/valkey-server
config_file:/app/valkey/valkey-8.1.1/valkey.conf
io_threads_active:0
availability_zone:
listener0:name=tcp,bind=*,bind=-::*,port=6379
127.0.0.1:6379>
会看到如下的
可以,升级成功~👏👏👏
😟😟😟注意:我们没有数据迁移,升级之后,数据也是丢失了。关于数据迁移的内容,在此没有提及,有兴趣的彦祖,可以自行尝试或者评论下迁移的方案一起学习~~