redis连接不上,两种解决方式

今天某个项目的redis连不上了,将自己用到的两个解决办法写篇记录(实际使用时方法二选一即可)。

redis连接不上,两种解决方式

        • 一、首先排查本地redis连接有没有问题
          • 1. 在服务器上查看redis
          • 2. 进入容器测试连接
        • 二、连接redis的两种方式(二选一使用即可)
          • 1. 第一种:配置远程策略
          • 2. 第二种:使用redis network 地址替换作为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      Up 10 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 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连接可以使用以下的两种办法:一是配置阿里云远程策略,二是用当前服务器上的redis network 地址替换作为redis的连接主机地址。

1. 第一种:配置远程策略

项目连接不成功,说明没有开通远程策略。那么就针对配置文件中的服务器地址(如下图)
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这个地址+端口,不使用服务器本身地址,否则无法连接。

你可能感兴趣的:(redis,redis,docker,linux)