今天某个项目的redis连不上了,将自己用到的两个解决办法写篇记录(实际使用时方法二选一即可)。
redis:
isRedisCache: 1 #是否使用redis缓存
database: 0 # Redis数据库索引(默认为0)
host: 176.17.0.9 # Redis服务器地址
port: 6379 # Redis服务器连接端口
password: 123456 # Redis服务器连接密码(默认为空)
timeout: 1000 # 连接超时时间(毫秒)
[root@iZxxxxxxxxx20t8shdhZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
137f72546f00 redis "docker-entrypoint.s…" 10 days ago Up 10 days 0.0.0.0:6379->6379/tcp redis
进入容器: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 6379
172.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 network 地址替换作为redis的连接主机地址。
项目连接不成功,说明没有开通远程策略。那么就针对配置文件中的服务器地址(如下图)
然后登录阿里云/腾讯云找到云服务器的安全组然后进行配置规则(具体怎么配置可以自行百度):
保存之后项目就可以正常连接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 # 连接超时时间(毫秒)
重新打包部署,就可以正常连接了。
注意:
如果使用第一种办法即去阿里云配置策略,则yml文件中的redis主机地址就还是服务器本身地址,不用更改配置文件;
如果使用第二种network 地址,则不用配置任何策略。但是如果想在服务器中进入redis容器连接则需要使用network这个地址+端口,不使用服务器本身地址,否则无法连接。