Redis本地/远程(外部)连接失败问题及解决

 更新时间:2025年03月14日 09:56:12   作者:Stephen·You  
这篇文章主要介绍了Redis本地/远程(外部)连接失败问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题现象

今天在 192.168.2.220(windows服务器)上安装并启动了一个 Redis服务,如下:

点击 redis-server.exe:

启动成功:

然后在192.168.2.101(本地) 连接 192.168.2.220 Redis服务,出现报错,如下:

随后,启动本地的java项目,配置 Redis,如下:

然后访问需要使用到 Redis服务 的接口,出现如下报错:

问题分析

1.报错信息

根据报错信息可知,大概意思就是说:

Redis连接 是以 “protected” 模式mode),该模式具有以下的特点:没有绑定可具体的ip地址,访问cli工具不需要认证密码,该模式下只支持“loopback”(回环)接口的调用。

//注:回环的意思大概就是说,只能在配置了redis的机器上访问redis连接,而不允许外部ip连接。

如果你想要连接该redis服务,你需要采用以下其中一种解决方法:

方案1.2.3:前三种的意思几乎一致,都是说让你去修改该 Redis的配置 ,让Redis以“protected-mode no”的配置来启动。

方案4:修改该 Redis的配置,让Redis绑定一个ip地址或一个认证密码。

2.知识点分析

2.1Redis 的配置文件的区别

可以看到有两个配置文件:

那该使用哪个呢?那就来说说 redis.windows.confredis.windows-service.conf 的区别:

查阅网上资料发现,网上流传着这样的说法:“当redis安装后,就会在系统服务中出现一个名为Redis的服务,通过点击启动来启动Redis”

通过 win+r 中,输入 compmgmt.msc ,打开管理工具点击服务,可以找到redis服务,然后看见类似下图:

通过这个图片可以看到,这个名为Redis的系统服务,默认是使用了 “redis.windows-service.conf ” 这个配置文件来启动的。

奇怪的是我看了一下却没有Redis这个系统服务。。。。。。好吧,有可能是Redis的版本的问题:

问题不大,因为我们其实完全就没必要把redis变成一个系统服务,从而实现开机自启动(后台);我觉得想用的时候,直接点击 redis-server.exe 启动 不香么???

现在要思考的问题其实是:当我们点击 redis-server.exe 启动 Redis 时,会不会也是使用了 “redis.windows-service.conf ” 这个配置文件来启动的呢?

我猜想:redis-server.exe 启动 Redis 时是使用“redis.windows.conf ”这个配置文件来启动的,否则,这个文件就没有存在的意义了。

搜了很久,没有在网上找到对应的资料,于是就自己来实验一下吧!!!!!!

2.2Redis 的 bind 配置

首先我们打开 redis.windows-service.conf,可以看见默认绑定了127.0.0.1(本地ip地址)

redis 中的 bind 配置作用就是:

  • 配置该redis连接 的 固定ip,配置完之后,就只有它绑定的那这个 ip 能访问到该redis连接;其他ip就不能。
  • 而由于 redis 默认绑定了 127.0.0.1 ,也就是只有 127.0.0.1 所映射的(192.168.2.220)这个ip能访问该 redis,其他ip就不能;
  • 因此这个配置会阻碍外部(192.168.2.101)对该 redis的访问。

2.3Redis 的 protected-mode 配置

“redis.windows-service.conf ” 文件中,可以找到如下配置:

通过查看注解,我们可以知道:

  • 该配置是默认启动(enabled)的;
  • 如果你想让其他主机(ip)连接该redis,则必须设置该配置为不可用的(disable),即使你不配置认证密码,也没有 通过 bind 配置绑定外部ip地址
  • 由此可知:该配置就是用于限制外部ip访问的,且要和 bind 配置一起使用。

心得

从上面的知识点可知,要解决问题,就需要对 redis的配置文件中的 bind 和 protected-mode 配置进行修改。

配置步骤

步骤1打开 “redis.windows-service.conf ” 文件,为Redis绑定一个ip地址

//注:我们一般都不需要在访问redis时使用到认证密码,所以没有要求的话,可以不配置

把该bing 配置(bind 127.0.0.1)注释掉,这样就能让所有ip都能访问到这个redis,修改如下:

步骤2打开 “redis.windows-service.conf ” 文件,修改Redis的 protected-mode 配置

下拉,找到 protected-mode 配置,修改为如下:

然后把原来的redis服务关闭,再点击redis-server.exe 启动。

然后再在本地(192.168.2.101)连接 192.168.2.220 Redis服务,出现如下报错:

再调用接口试试,发现还是报错:

好了,接下来就是验证实验的时刻了

1. 关闭redis窗口,将“redis.windows-service.conf ” 还原成初始状态;

2. 将以上步骤应用到 “redis.windows.conf” 这个配置文件上;

3. 点击 redis-server.exe 启动;

发现还是会报同样的错误,那就不知道是为什么了。。。尴尬

于是,我又把“redis.windows.conf” 和 “redis.windows-service.conf ” 两个配置文件都做了修改,然后再点击 redis-server.exe 启动,结果还是不行

这样就不好说问题出在哪里,但是能确定的是:这两个配置文件的修改都没有生效!!!!!!

必杀技

自己写个启动脚本(redis-start.bat),配置redis的启动命令并指定了配置文件,来启动redis,终于可以了:

双击 “redis-start.bat” 文件

启动成功:

接口调用成功:

注意:这里不要指定 “redis.windows-service.conf ” 配置文件,否则会出现以下情况:

虽然启动了,但是一片黑暗,啥信息都看不到,由此似乎可以证明了我的猜想:

redis-server.exe 启动 Redis 时是使用“redis.windows.conf ”这个配置文件来启动的

因为,redis-server.exe 启动 Redis 时,是有信息可以看见的,所以说

“redis.windows-service.conf ” 这个配置文件,应该是用来将Redis配置成一个windows系统服务而存在的!!!

总之,最靠谱的方法,还是用脚本启动!!!

解决方法

1. 打开 “redis.windows​​​​​​​” 文件,把该bing 配置(bind 127.0.0.1)注释掉

2. 修改Redis的 protected-mode 配置 protected-mode no ,如下:

3. 创建启动脚本文件(redis-start.bat),写入启动命令并指定配置文件:

4. 双击 “redis-start.bat” 文件启动:

5. 访问接口成功:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • redis限流的实际应用

    redis限流的实际应用

    这篇文章主要介绍了redis限流的实际应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Redis遍历海量数据集的几种实现方法

    Redis遍历海量数据集的几种实现方法

    Redis作为一个高性能的键值存储数据库,广泛应用于各种场景,包括缓存、消息队列、排行榜,本文主要介绍了Redis遍历海量数据集的几种实现方法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • dubbo服务使用redis注册中心的系列异常解决

    dubbo服务使用redis注册中心的系列异常解决

    这篇文章主要为大家介绍了dubbo服务在使用redis注册中心遇到的一系列异常的解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • Redis IP地址的绑定的实现

    Redis IP地址的绑定的实现

    这篇文章主要介绍了Redis IP地址的绑定的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Redis实现分布式事务的示例

    Redis实现分布式事务的示例

    Redis虽不支持传统SQL数据库ACID特性的事务,但提供了事务特性,允许多命令捆绑执行,通过命令MULTI、EXEC、DISCARD、WATCH实现,感兴趣的可以了解一下
    2024-10-10
  • Redis+拦截器实现接口防刷

    Redis+拦截器实现接口防刷

    接口防刷有很多种实现思路,例如:拦截器/AOP+Redis、拦截器/AOP+本地缓存、前端限制等等很多种实现思路,本文主要来讲一下 拦截器+Redis 的实现方式,需要的可以参考下
    2023-08-08
  • 详解redis中的下载和安装(最新推荐)

    详解redis中的下载和安装(最新推荐)

    本文详细介绍了如何在Linux和Docker上安装、配置、启动和关闭Redis,包括下载安装包、解压、编译安装、配置文件修改、前台和后台启动、关闭以及Docker容器化部署等步骤,感兴趣的朋友一起看看吧
    2025-03-03
  • 在Redis数据库中实现分布式速率限制的方法

    在Redis数据库中实现分布式速率限制的方法

    这篇文章主要介绍了在Redis数据库中实现分布式速率限制的方法,文中展示了一个用Python编写的应用示例,需要的朋友可以参考下
    2015-06-06
  • Redis高并发场景下秒杀超卖解决方案(秒杀场景)

    Redis高并发场景下秒杀超卖解决方案(秒杀场景)

    早起的12306购票,刚被开发出来使用的时候,12306会经常出现超卖 这种现象,也就是说车票只剩10张了,却被20个人买到了,这种现象就是超卖,今天通过本文给大家介绍Redis高并发场景下秒杀超卖解决方案,感兴趣的朋友一起看看吧
    2022-04-04
  • Redis+threading实现多线程消息队列的使用示例

    Redis+threading实现多线程消息队列的使用示例

    Redis多线程消息队列是一种使用Redis作为存储后端的消息队列实现,它利用Redis的线程并发处理能力来提高消息队列的处理效率,本文主要介绍了Redis+threading实现多线程消息队列的使用示例,感兴趣的可以了解一下
    2023-12-12

最新评论