Redis 客户端连接服务器失败
Posted 北冥牧之
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 客户端连接服务器失败相关的知识,希望对你有一定的参考价值。
公司项目开发环境需要使用到 Redis,申请基础技术支撑平台的 Redis 中间件比较麻烦,项目组也不知道具体流程,而且时间可能比较长。
现在的情况是,项目因为 Redis 启动报错。
这种情况下,我们项目组就自行在虚拟机上临时搭建了 Redis。当然为了效率,搭建的是单机版的,采用的是公司提供的安装包与运行脚本。
本来这都是很简单的事情,但是安装完毕之后,在服务器上可以正常登陆访问。
解压后的Redis目录如下:
启动Redis
./redis-cli
因为是在本机安装的,也没有密码,这样是直接可以登陆的。
客户端工具连接Redis报错
我们使用Redis客户端连接工具AnotherRedisDesktopManager连接Redis,竟然报错了,报错信息如下:
redis-cli 报错:redis Could not connect to Redis at 127.0.0.1:6379: Connection refused
这个是没有想到的。这说明服务启动没问题,但是连接被拒绝了。
下面解决方案参考这篇文章:
redis bind连不上报错redis Could not connect to Redis at 127.0.0.1:6379: Connection refused
以及这篇文章:
Could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝,无法连接
根据上述文章所说,我们知道:
bind表示的是指定本机可以接受连接的网卡地址,比如redis服务器上有一个公网IP(114.114.114.114),一个内网IP(192.168.1.109),如果该redis服务器需要被本机及以外的服务器访问(比如说内网的服务器),此时需要在redis.conf中绑定内网ip:
bind 192.168.1.109 127.0.0.1
意思是说,使用192.168.1.109 这个ip来接收来自外部的连接请求。
未修改的原始状态是:
bind 127.0.0.1
这样的绑定只能在服务器上自己连接自己,就像我上面连接的一样,只需要通过./redis-cli命令就登陆上了。但是这种方式在非服务器的地方连接是失败的。
上面给出了一个方案,还有一种方案是,直接注释掉该绑定ip,即注释掉:
# bind 127.0.0.1
这代表的是开启所有ip地址的访问权限。
把redis.conf文件里面的protected-mode yes的“yes”改成“ no ”,
- yes 保护模式,只允许本地链接
- no 保护模式关闭
此时再通过客户端工具连接Redis已经成功。
(二)连接Redis,Lettuce与Jedis客户端
参考技术A Redis优势从 Spring Boot 2.x 开始 Lettuce 已取代 Jedis 成为首选 Redis 的客户端。当然 Spring Boot 2.x 仍然支持 Jedis,并且你可以任意切换客户端。
使用Lecttuce需要再引用一个包
配置
org.springframework.boot.autoconfigure.data.redis.RedisProperties中集成了Jedis与Lettuce。
概念:
Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持,
Redisson:实现了分布式和可扩展的Java数据结构。
Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
优点:
Jedis:比较全面的提供了Redis的操作特性
Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列
Lettuce:主要在一些分布式缓存框架上使用比较多
可伸缩:
Jedis:使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。
Redisson:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Redisson的API是线程安全的,所以可以操作单个Redisson连接来完成各种操作
Lettuce:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以操作单个Lettuce连接来完成各种操作
以上是关于Redis 客户端连接服务器失败的主要内容,如果未能解决你的问题,请参考以下文章
redis网络波动,Jedis/Lettuce是阻塞还是失败?
Redis故障排查「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案
Unable to connect to 192.168.xx.xxx:6379 连接虚拟机(Linux)上的redis失败解决方法