linux本地的redis是7.0.5版本
docker中的redis是6.2.6
为什么linux重启后,使用redis-cli命令,使用的是docker中的redis
只有关了docker使用的才是本地的redis
为什么默认使用的是docker中的redis
默认连接的是本地6379端口的服务,如果容器绑定的是宿主机6379那自然是连接容器的Server
docker exec -it b32029e1b32e redis-cli #其中b32029e1b32e为容器ID,通过docker ps查询得到
解决方案:
问题的根本在于后续启动使用的Redis版本与启动Docker容器时使用的Redis版本不一致导致。为了解决这个问题,建议执行以下步骤:
可以执行以下命令查看Docker中Redis的版本号:
docker exec -it <容器名称> redis-cli info server | grep redis_version
也可以进入Docker容器内部查看:
docker exec -it <容器名称> /bin/sh
然后执行redis-cli
进入Redis客户端,输入info server
查看版本号。
确认Docker中Redis的版本号后,可以决定是升级本地Redis还是降低Docker中Redis版本号。
(1)安装新版本的Redis
可以执行以下命令安装最新版本的Redis:
sudo apt update
sudo apt install redis-server
(2)备份原来的Redis数据
执行以下命令备份原来的Redis数据:
cp /etc/redis/redis.conf /etc/redis/redis.conf.backup
(3)使用新的Redis配置文件
使用新版本安装后自带的配置文件,并将其中的bind
和protected-mode
设置为no
,其他配置项则使用原来的Redis配置文件:
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.new
sudo sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis/redis.conf.new
sudo sed -i 's/protected-mode yes/protected-mode no/g' /etc/redis/redis.conf.new
sudo sed -i '/save/d' /etc/redis/redis.conf.new
(4)将原来Redis的数据导入到新的Redis中
执行以下命令将原来Redis的数据导入到新的Redis中:
redis-cli config set stop-writes-on-bgsave-error no
cat /var/lib/redis/dump.rdb | redis-cli -a PASSWORD --pipe
其中PASSWORD
是原来Redis中设置的密码。
重启新的Redis:
sudo systemctl restart redis.service
(1)删除Docker中的旧版本Redis:
docker stop <容器名称>
docker rm <容器名称>
(2)重新下载Docker中新的Redis版本:
docker pull redis:<新版本号>
(3)启动Docker容器:
docker run -d -p 6379:6379 --name <容器名称> redis:<新版本号>
其中<新版本号>
是下载下来的Docker中新的Redis版本号。
如果希望继续使用Docker的Redis,可以通过修改redis-cli的启动命令,使其连接本地Redis:
redis-cli -h localhost
这样就可以确保使用的是本地的Redis而不是Docker中的Redis了。