深入了解Redis连接数问题的现象和解法

 更新时间:2023年12月21日 08:24:54   作者:柏油  
一般情况 Redis 连接数问题并不常见,但是当你业务服务增加、对 Redis 的依赖持续增强的过程中,可能会遇到很多 Redis 的问题,这个时候,Redis 连接数可能就成了一个常见的问题,在本章节,希望能够带大家了解Redis连接数问题的现象和解法,需要的朋友可以参考下

1. 前言

一般情况 Redis 连接数问题并不常见,但是当你业务服务增加、对 Redis 的依赖持续增强的过程中,可能会遇到很多 Redis 的问题,这个时候,Redis 连接数可能就成了一个常见的问题。

简单定义:因各种原因,程序对Redis的连接数激增,超过Redis服务器能够承受的上线,从而程序无法正常访问Redis进而引发功能异常的问题。

Redis连接数问题并不常见,但现在系统对 Redis 依赖较强,并且也是解决各系统性能的利器,连接数打爆造成的Redis暂时不可用会影响正常功能,至少系统性能急剧下降,影响较大。

在本章节,希望能够带大家了解Redis连接数问题的现象和解法。

2. 背景知识

Redis原生支持长短连接,但与我们使用数据库类似,大多数Redis客户端/中间件都使用了连接池来管理对Redis服务器的连接,从而达到连接复用、提高IO效率的效果(连接池的概念与作用不再赘述)。

无论是Jedis还是Lettuce,都默认支持了连接池的配置,池中连接都是长连接。

通常我们使用Redis可能有几种场景:

1)用作缓存,若丢失,程序可以自动或手动重建,不影响业务正确性,但极有可能影响性能;

2)用作存储,若丢失即是业务数据的丢失,较难恢复,一般为不重要的数据,业务上应有预案;

3)用作分布式锁,若丢失则可能造成数据一致性问题;

4)用作阻塞队列,若丢失则可能造成业务数据的丢失,需要有相应的校验与补偿措施。

提倡使用1、3,不提倡使用2、4。

特别是4阻塞队列,虽不禁止,但对Redis连接占用极为严重,应作为最后之举,之前应该寻求使用其他消息队列中间件、内存处理等方案。

3. 问题处理

3.1 如何感知连接数过多

1)使用INFO命令:Redis提供了 INFO 命令来获取Redis服务器的各种信息和统计。其中,connected_clients字段表示当前已连接的客户端数量。

redis-cli info | grep connected_clients

2)使用CLIENT LIST命令:这个命令可以列出所有连接到Redis服务器的客户端信息。

redis-cli client list

3)使用CONFIG GET maxclients命令:可以获取Redis服务器允许的最大客户端连接数。

redis-cli config get maxclients

4)监控工具:搭建监控工具,通过图像走势更能直观的展现连接数使用情况。如Prometheus、Grafana、Redis exporter等,来实时监控Redis的连接数,大致流程是:

  • 在Redis服务端部署 如Prometheus,用来抓取数据 redis 服务端数据,还是主要通过 INFO 等指令抓取
  • 配置 Prometheus 从 Redis exporter 抓取数据
  • 配置 Grafana 的数据源 Prometheus,用来展示数据

如果你发现Redis的连接数过多,可能需要检查你的应用是否正确地关闭了不再使用的连接,或者是否有必要增加Redis服务器的最大连接数。

3.2 常见原因

1)生产容量规划不合理,较多数量的应用机器但没有申请匹配容量的Redis服务器;

2)正常发布时,旧节点摘流后一段时间内,其连接池尚未完全断开,而同时新的节点又启动开始连接,使得Redis服务器面对了成倍的连接请求;

3)碰到某种连接异常时,程序反复重试,连接激增;

4)过度使用阻塞队列;

5)使用第三方工具连上Redis,工具本身设计不完善(例如scan所有key)引起生产问题。

3.3 如何止损

问题发生时首先可以考虑采取如下措施进行止损:

1)若判断为上述第1、2种原因,首先考虑应用缩容

2)若判断为上述第3、4种原因,首先考虑重启应用(且避免进入原因2,参照下方解决方案2)

3)若判断为上述第5种原因,立即停止工具的使用

4)与此同时,服务器端请运维帮忙清理连接、Redis扩容、切从等

3.4 长效解决方案

1)新功能上线、新活动应对时,合理规划生产容量,一定数量的应用机器应该匹配相应容量的Redis服务器

2)正常发布时,旧节点摘流、新节点启动两者的时间间隔需要适当控制,不宜太快,以免依赖资源打满

3)应用代码中谨慎重试

4)慎重将Redis用作阻塞队列,应作为最后之举,之前应该寻求使用其他消息队列中间件、内存处理等方案

5)禁止使用第三方工具连上Redis

以上就是深入了解Redis连接数问题的现象和解法的详细内容,更多关于Redis连接数问题的资料请关注脚本之家其它相关文章!

相关文章

  • Windows系统安装redis数据库

    Windows系统安装redis数据库

    这篇文章介绍了Windows系统安装redis数据库的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • redis事务执行常用命令及watch监视详解

    redis事务执行常用命令及watch监视详解

    这篇文章主要为大家介绍了redis事务执行常用命令及watch监视详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • redis的五大数据类型应用场景分析

    redis的五大数据类型应用场景分析

    这篇文章主要介绍了redis的五大数据类型实现原理,本文给大家分享五大数据类型的应用场景分析,需要的朋友可以参考下
    2021-08-08
  • Redis使用RedisTemplate导致key乱码问题解决

    Redis使用RedisTemplate导致key乱码问题解决

    本文主要介绍了Redis使用RedisTemplate导致key乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Redis 持久化 RDB 与 AOF的执行过程

    Redis 持久化 RDB 与 AOF的执行过程

    本文给大家记录Redis 持久化RDB 与 AOF的执行过程与配置,通过内部触发 RDB 场景分析Redis 持久化 RDB的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • Redis做数据持久化的解决方案及底层原理

    Redis做数据持久化的解决方案及底层原理

    Redis有两种方式来实现数据的持久化,分别是RDB(Redis Database)和AOF(Append Only File),今天通过本文给大家聊一聊Redis做数据持久化的解决方案及底层原理,感兴趣的朋友一起看看吧
    2021-07-07
  • 如何监听Redis中Key值的变化(SpringBoot整合)

    如何监听Redis中Key值的变化(SpringBoot整合)

    测试过程中我们有一部分常量值放入redis,共大部分应用调用,但在测试过程中经常有人会清空redis,回归测试,下面这篇文章主要给大家介绍了关于如何监听Redis中Key值变化的相关资料,需要的朋友可以参考下
    2024-03-03
  • 一文详解Redis中的持久化

    一文详解Redis中的持久化

    这篇文章主要介绍了一文详解Redis中的持久化,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复
    2022-09-09
  • 使用Redis获取数据转json,解决动态泛型传参的问题

    使用Redis获取数据转json,解决动态泛型传参的问题

    这篇文章主要介绍了使用Redis获取数据转json,解决动态泛型传参的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 使用拦截器+Redis实现接口幂思路详解

    使用拦截器+Redis实现接口幂思路详解

    这篇文章主要介绍了使用拦截器+Redis实现接口幂等,接口幂等有很多种实现方式,拦截器/AOP+Redis,拦截器/AOP+本地缓存等等,本文讲解一下通过拦截器+Redis实现幂等的方式,需要的朋友可以参考下
    2023-08-08

最新评论