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故障排查「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案

(二)连接Redis,Lettuce与Jedis客户端

微服务连接不上redis会直接访问数据库吗

Unable to connect to 192.168.xx.xxx:6379 连接虚拟机(Linux)上的redis失败解决方法