关于线上问题Dockert中Redis时报错_缓存

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客 💞当前专栏: 报错及Bug ✨特色专栏: MySQL学习 🥭本文内容:关于线上问题Dockert中Redis时报错
🖥️个人小站 :个人博客,欢迎大家访问
📚个人知识库: 知识库,欢迎大家访问

原因: docker部署redis,项目使用redis时,报错nested exception is io.lettuce.core.RedisCommandExecutionException: READONLY (当前redis为只读

1. 思路

最开始我的思路是,可能当时是因为Docker部署的Redis,没有什么配置文件相关的配置,导致当前Redis只能读不能写入。

2. 解决方式

2.1 进入容器

docker exec -it redis /bin/bash

2.2 进入Redis客户端

redis-cli

2.3 查看Redis属性信息

关于线上问题Dockert中Redis时报错_缓存_02

备注:可看到redis为slave,为从节点,默认为只读

2.4 设置redis只读属性为no

关于线上问题Dockert中Redis时报错_docker_03

重启Redis容器之后,发现问题解决了。

3. 后续

但是第二天发现仍出现了昨天同样的问题,于是觉得这种方式行不通,通过查询资料得知,在服务器安装Redis则必须对外访问ip设置为0.0.0.0,并且Redis必须设置密码

于是删除Docker中的Reids镜像,重新安装Reis,并设置密码访问。

1. 拉取redis镜像
# 不指定版本号,默认拉取最新版的redis 
docker pull redis
# 指定的版本号 docker pull redis:5.0.14
# 查看镜像是否拉取成功docker images

2. 运行redis
# 带密码认证的redis,登录时需要输入验证码  appendonly(redis是否持久化)
docker run --name redis -p 6379:6379 -d --restart=always redis redis-server --appendonly yes --requirepass 123456

# 不带密码认证的redis
docker run --name redis -p 6379:6379 -d --restart=always redis redis-server --appendonly yes

这里一定要选择第一种,Redis持久化,设置密码

4. 总结

OK,到这里问题才完全解决!