今天某个项目的redis连不上了,将自己用到的两个解决办法写篇记录(实际使用时方法二选一即可)。
redis连接不上,两种解决方式
我们最初在项目的application.yml文件上的redis配置是服务器ip+端口,但是这样的配置项目并没有成功连接redis:
redis:
isRedisCache:1 #是否使用redis缓存
database:0 # Redis数据库索引(默认为0)
host:176.17.0.9 # Redis服务器地址
port:6379 # Redis服务器连接端口
password:123456 # Redis服务器连接密码(默认为空)
timeout:1000 # 连接超时时间(毫秒)
一、首先排查本地redis连接有没有问题
1. 在服务器上查看redis
[root@iZxxxxxxxxx20t8shdhZ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
137f72546f00 redis "docker-entrypoint.s…"10 days ago Up10 days 0.0.0.0:6379->6379/tcp redis
2. 进入容器测试连接
进入容器:docker exec -it 137f72546f00 bash
连接redis:redis-cli -h ip地址 -p 端口
有提示密码则输入:auth 密码, 如 auth 123456
如果能顺利连接,则使用ping命令查看是否能ping通pong。
以下代码举例演示:
[root@iZxxxxxxxxx20t8shdhZ~]# docker exec -it 137f72546f00 bash
root@137f72546f00:/data# redis-cli -h 176.17.0.9-p 6379172.17.0.9:6379> ping
(error) NOAUTH Authentication required.172.17.0.9:6379> auth 123456
OK
172.17.0.9:6379> ping
PONG
172.17.0.9:6379>
可以看出本地连接是没问题的,redis可以ping通,则表示本地连接redis没有问题
二、连接redis的两种方式(二选一使用即可)
通过上面的测试方式知道了redis本身没问题,那么我们要实现项目的redis连接可以使用以下的两种办法:一是配置阿里云远程策略,二是用当前服务器上的redis network 地址替换作为redis的连接主机地址。
1. 第一种:配置远程策略
项目连接不成功,说明没有开通远程策略。那么就针对配置文件中的服务器地址(如下图)
然后登录阿里云/腾讯云找到云服务器的安全组然后进行配置规则(具体怎么配置可以自行百度):
保存之后项目就可以正常连接redis了。
2. 第二种:使用redis network 地址替换作为redis的连接主机地址
首先要查找到redis的network地址:docker inspect redis
[root@iZxxxxxxxxx20t8shdhZ~]# docker inspect redis
*前面的内容省略,只需要关注从下面的"IPAddress":*"Networks":{"master":{"IPAMConfig":null,"Links":null,"Aliases":["redis","137f72546f59"],"NetworkID":"507fcefa41123f2f2124467100e6ef772ef9dad7384e363a6c6c02433014ffa9","EndpointID":"734e9bf66314ce664382b1e6a5beada582789afc17dfdc1ee664462a59620e1a","Gateway":"174.12.0.1","IPAddress":"174.16.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:13:00:03","DriverOpts":null}}
然后将这个174.16.0.2地址放到项目的application.yml文件里作为redis连接主机:
redis:
isRedisCache:1 #是否使用redis缓存
database:0 # Redis数据库索引(默认为0)
host:174.16.0.2 # Redis服务器的network地址
port:6379 # Redis服务器连接端口
password:123456 # Redis服务器连接密码(默认为空)
timeout:1000 # 连接超时时间(毫秒)
重新打包部署,就可以正常连接了。
以上就是两种连接redis的办法。
注意:
如果使用第一种办法即去阿里云配置策略,则yml文件中的redis主机地址就还是服务器本身地址,不用更改配置文件;
如果使用第二种network 地址,则不用配置任何策略。但是如果想在服务器中进入redis容器连接则需要使用network这个地址+端口,不使用服务器本身地址,否则无法连接。
版权归原作者 Ivy_xinxxx 所有, 如有侵权,请联系我们删除。