概述
因为windows的最新版本redis已经在16年就停止更新了,目前最新的版本只到redis3,很多redis新增的特性都无法使用。例如redis5的stream,windows版本就没有。
这篇文章通过使用wsl来为windows提供最新版本redis的支持,而免于去启动虚拟机的麻烦事了。
主要安装的流程和linux上一般无异。
1、下载redis
打开 https://redis.io/download/ 查看可用版本。
截至这篇文章写作时,redis目前的稳定版本是6,预计今年会更新7,目前还在rc候选发布阶段。
因此我们选择6的版本。
复制下载地址:https://download.redis.io/releases/redis-6.0.16.tar.gz
进入wsl命令行中,执行wget https://download.redis.io/releases/redis-6.0.16.tar.gz
2、安装redis
执行tar xzf redis-6.0.16.tar.gz
然后cd redis-6.0.16/
执行make
,等待编译完成,src目录下就会出现redis-server、redis-cli这两个应用,分别对应服务端和客户端。
之后就是安装: sudo make PREFIX=/usr/local/redis install
安装完毕之后就会在/usr/local/redis下出现对应的redis可执行程序:
我们进入其中查看一下:
hengyumo@DESKTOP-FPVEJ74:~/soft/redis-6.0.16$ cd /usr/local/redis/
hengyumo@DESKTOP-FPVEJ74:/usr/local/redis$ ls
bin
hengyumo@DESKTOP-FPVEJ74:/usr/local/redis$ cd bin/
hengyumo@DESKTOP-FPVEJ74:/usr/local/redis/bin$ pwd
/usr/local/redis/bin
hengyumo@DESKTOP-FPVEJ74:/usr/local/redis/bin$ ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
此时安装已经完成。
接下来是启动,
首先复制一份redis默认的配置文件到bin目录:
sudo cp /home/hengyumo/soft/redis-6.0.16/redis.conf /usr/local/redis/bin
然后就是
- 修改配置文件redis.conf的 daemonize yes 设为守护进程,这样redis就会以守护进程方式启动,不会因为会话关闭而终止。
- 注释 #bind 127.0.0.1 ,这样端口放开,提供外部监听
- 修改logfile “/usr/local/redis/redis.log”,指定了redis日志的存储位置。
- 使用redis.conf启动服务端
sudo ./redis-server redis.conf
- 查看进程
ps -ef | grep -i redis
,以守护进程启动成功
如果启动失败,那么可能的原因是,windows的redis已经占有了6379这个默认端口,报错如下:
4571:C 26 Apr 2022 22:29:17.770 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4571:C 26 Apr 2022 22:29:17.770 # Redis version=6.0.16, bits=64, commit=00000000, modified=0, pid=4571, just started
4571:C 26 Apr 2022 22:29:17.770 # Configuration loaded
4571:M 26 Apr 2022 22:29:17.771 * Increased maximum number of open files to 10032 (it was originally set to 1024).
4571:M 26 Apr 2022 22:29:17.771 # Could not create server TCP listening socket *:6379: bind: Address already in use
此时有两个解决办法,一个是卸载windows的redis或修改其端口,一个是修改wsl的端口。
此处我选择修改wsl的端口,
修改redis.conf的 port 6379
为port 16379
,将端口改为16379。
重新启动,这次成功无误了:
hengyumo@DESKTOP-FPVEJ74:/usr/local/redis/bin$ sudo ./redis-server redis.conf
hengyumo@DESKTOP-FPVEJ74:/usr/local/redis/bin$ ps -ef | grep -i redis
root 4626 1 0 22:34 ? 00:00:00 ./redis-server *:16379
hengyumo 4632 14 0 22:34 tty1 00:00:00 grep --color=auto -i redis
设置开机自启动
因为是手动运行脚本去执行redis启动的,当关机时,redis就会关闭,所以需要设置开机自启动。
这里我们可以使用redis自带的启动脚本,
正常是在安装目录下的utils/redis-init-scripe
执行sudo cp utils/redis_init_script /etc/init.d/redis
编辑该脚本sudo vim /etc/init.d/redis
,修改其中的配置文件位置和端口,
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: redis_6379
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Redis data structure server
# Description: Redis data structure server. See https://redis.io
### END INIT INFO
REDISPORT=16379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/bin/redis.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
执行sudo service redis start
将redis添加到系统服务中
之后我们查看服务状态,
hengyumo@DESKTOP-FPVEJ74:/usr/local/redis/bin$ sudo service --status-all | grep redis
[ ? ] apport
[ ? ] cryptdisks
[ ? ] cryptdisks-early
[ ? ] hwclock.sh
[ ? ] plymouth
[ ? ] plymouth-log
[ + ] redis
运行中的服务输出为 +,代表我们的redis已经成功添加到系统服务中了。
3、验证新版本功能可用
我们在windos的命令行
打开redis-cli,连接wsl的redis:
C:\Users\NH55\Desktop>redis-cli -p 16379
127.0.0.1:16379> xadd testStream * msg hello
"1650983851252-0"
这里尝试建立了一个stream队列,成功了。证明我们的wsl的版本功能可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)