Redis本地/远程(外部)连接失败详解
目录
问题现象:
问题分析:
1.报错信息:
2.知识点分析:
2.1Redis 的配置文件的区别:
我猜想:redis-server.exe 启动 Redis 时是使用“redis.windows.conf ”这个配置文件来启动的,否则,这个文件就没有存在的意义了。
2.2Redis 的 bind 配置:
2.3Redis 的 protected-mode 配置:
总结:
配置步骤:
好了,接下来就是验证实验的时刻了:
必杀技:
redis-server.exe 启动 Redis 时是使用“redis.windows.conf ”这个配置文件来启动的
“redis.windows-service.conf ” 这个配置文件,应该是用来将Redis配置成一个windows系统服务而存在的!!!
总之,最靠谱的方法,还是用脚本启动!!!
解决方法:
问题现象:
今天在 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.conf 和 redis.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本地/远程(外部)连接失败详解相关推荐
- Java本地远程服务器debug调试详解
日常我们debug是经常用的,但是本地还好说,远程debug就有点难度,而且有时候必须要在预演,测试环境的服务器去debug,举个例子,需要https,公网,域名之类的,测试服务器这些有些是配置的,但 ...
- Redis Lettuce客户端异步连接池详解
前言 异步/非阻塞编程模型需要非阻塞API才能获得Redis连接.阻塞的连接池很容易导致阻塞事件循环并阻止您的应用程序进行处理的状态.Lettuce带有异步,非阻塞池实现,可与Lettuces异步连接 ...
- mysql二进制方式_MySQL数据库之MySql二进制连接方式详解
本文主要向大家介绍了MySQL数据库之MySql二进制连接方式详解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 使用mysql二进制方式连接 您可以使用MySQL二进制方式进 ...
- redis cluster管理工具redis-trib.rb详解
redis cluster管理工具redis-trib.rb详解 redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集 ...
- python远程linux服务器执行命令_基于使用paramiko执行远程linux主机命令(详解)
paramiko是python的SSH库,可用来连接远程linux主机,然后执行linux命令或者通过SFTP传输文件. 关于使用paramiko执行远程主机命令可以找到很多参考资料了,本文在此基础上 ...
- 移动用户远程接入L2TP配置详解
移动用户远程接入L2TP-vpn配置详解 学会查找参考文档,和官方资料很重要 华为企业产品技术支持网站 - 华为 1.话不多说先上图: 图为模拟环境的基础环境配置 模拟软件:ensp 系统环境:win ...
- caffeine本地缓存的使用和详解
在项目中我们经常使用缓存架构,来缓存我们的数据,比如redis.caffeine等.那么redis和caffeine有什么区别?作用又有哪些不同呢? caffeine本地缓存的使用和详解 caffei ...
- Spring Boot 使用 Druid 连接池详解
Spring Boot 使用 Druid 连接池详解 Alibaba Druid 是一个 JDBC 组件库,包含数据库连接池.SQL Parser 等组件,被大量业务和技术产品使用或集成,经历过严苛的 ...
- mysql 点赞数据库设计_基于redis实现的点赞功能设计思路详解
点赞其实是一个很有意思的功能.基本的设计思路有大致两种, 一种自然是用mysql等 数据库直接落地存储, 另外一种就是利用点赞的业务特征来扔到redis(或memcache)中, 然后离线刷回mysq ...
最新文章
- 云计算-从基础到应用架构系列-云计算的概念
- PHP常用正则表达式汇总 [复制链接]
- vmdk文件怎么安装到虚拟机_【技术分享】虚拟机镜像解析
- tomcat源码分析_Tomcat源码分析(一)--Tomcat的初始化
- 【linux】查看ip
- docker+mysql创建用户名密码_docker构建私有仓库并设置仓库用户和密码
- java并发初探ReentrantWriteReadLock
- 基于B+树的学生信息管理系统
- 验证空间变形:电子在测地线的圆形轨道上辐射行为
- VSCODE + 搜狗输入法,文字突然变成了繁体字,为什么?
- 关于本学期学校数据库课程的总结和一些心得
- html 大转盘游戏,HTML5 Canvas大转盘抽奖活动页面代码
- 【英语-同义词汇词组】due to的用法及相关词组(because of | owing to)的用法区别
- Linux wait和waitpid和kill
- 常见的head内标签
- 什么是蜘蛛池的搜索留痕技术
- springboot+vue网上学生评教系统java
- mysql错误码 1068_服务启动报错----错误1068 的解决方法
- 达梦数据库中各种表的管理
- RAID 容量计算器