redis client连接数过多,大量空闲连接无法释放

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: redis client连接数过多,大量空闲连接无法释放

redis服务端连接却没有释放,这个问题就是因为redis默认timeout没有做修改,无论连接是否空闲,长期保持连接状态。

  • redis client list 查看连接数

    相关参数解释
Redis CLIENT LIST命令用于返回所有连接到服务器的客户端信息和统计数据。
返回值
bulk-string-reply: 一个独特的字符串,格式如下:
每个已连接客户端对应一行(以 LF 分割)
每行字符串由一系列 属性=值(property=value) 形式的域组成,每个域之间以空格分开。
下面是各字段的含义::
  id: 唯一的64位的客户端ID(Redis 2.8.12加入)。
  addr: 客户端的地址和端口
  fd: 套接字所使用的文件描述符
  age: 以秒计算的已连接时长
  idle: 以秒计算的空闲时长
  flags: 客户端 flag
  db: 该客户端正在使用的数据库 ID
  sub: 已订阅频道的数量
  psub: 已订阅模式的数量
  multi: 在事务中被执行的命令数量
  qbuf: 查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区)
  qbuf-free: 查询缓冲区剩余空间的长度(字节为单位, 0 表示没有剩余空间)
  obl: 输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区)
  oll: 输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里)
  omem: 输出缓冲区和输出列表占用的内存总量
  events: 文件描述符事件
  cmd: 最近一次执行的命令

优化方案

  1. 通过ip排查对应的service服务,查看是否可以进行优化。
  2. config get timeout
    命令查看空闲超时时间
    0 默认不开启
  3. config set timeout 60

建议为0,有用分布式锁的情况下,看业务场景

  1. 配置默认空闲超时时间为60s
  2. config rewrit 保存
    可在redis.conf 配置文件中添加重启生效。

  • 检查配置步骤
#1. 登陆redis集群
redis-cli -h 127.0.0.1 -p 1000 -c10.10.2.19:1000> auth 123456
#2. 查看redis的配置timeout(当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能)
config get timeout 
#3. 配置超时
config set timeout 0  # 默认
#4. 查看连接状态
lsof -i:1000
netstat -antp | grep 1000
# 如果是集群模式,那么每个节点都得需要修改。
  • redis连接数与最大连接数
    方法1. 在redis-cli命令行使用:info clients可以查看当前的redis连接数
127.0.0.1:6379> info clients
#Clients
connected_clients:621
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
127.0.0.1:6379>
方法2:config get maxclients 可以查询redis允许的最大连接数
127.0.0.1:6379> CONFIG GET maxclients
    ##1) "maxclients"
    ##2) "10000"
127.0.0.1:6379>
  • 设置、修改
  1. 在2.6之后版本,可以修改最大连接数配置,默认10000,可以在redis.conf配置文件中修改
    maxclients 10000
  2. config set maxclients num 可以设置redis允许的最大连接数
127.0.0.1:6379> CONFIG set maxclients 10
OK
127.0.0.1:6379>
  1. 启动redis.service服务时加参数–maxclients 100000来设置最大连接数限制
redis-server --maxclients 100000 -f /etc/redis.conf
  • redis-cli命令控制行中获取客户端信息命令
CLIENT LIST获取客户端列表
CLIENT SETNAME    设置当前连接点redis的名称
CLIENT GETNAME    查看当前连接的名称
CLIENT KILL ip:port    杀死指定连接
CLIENT LIST
    ##id=3 addr=127.0.0.1:36588 fd=5 name= age=7 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
CLIENT SETNAME js
    ##OK
CLIENT LIST
    ##id=3 addr=127.0.0.1:36588 fd=5 name=js age=37 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
CLIENT GETNAME
    ##"js"
CLIENT KILL id 3
    ##(integer) 0

# 查看redis连接数
netstat -nap|grep redis |wc -l 
# 查看redis信息连接
redis -info
# redis 监控
redis -monitor


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
NoSQL Java API
Redis官方推荐的Java连接开发工具Jedis
Redis官方推荐的Java连接开发工具Jedis
|
8天前
|
前端开发 NoSQL 数据库
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
|
8天前
|
弹性计算 NoSQL 网络安全
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
软件开发常见之云数据库Redis连接不上如何解决,修改配置后,需要重启下redis服务,配置才能生效呢,是重启,而不是重载配置,最后导致的问题是点击了的重启,配置修改了之后必须点击重启,而不是修改
|
19天前
|
NoSQL Redis 数据安全/隐私保护
连接测试服务器redis
连接测试服务器redis
22 1
|
24天前
|
NoSQL Go Redis
如何使用 Go 和 `go-redis/redis` 库连接到 Redis 并执行一些基本操作
如何使用 Go 和 `go-redis/redis` 库连接到 Redis 并执行一些基本操作
16 1
|
1月前
|
存储 NoSQL Redis
多次访问redis造成redis连接断开的解决方案
多次访问redis造成redis连接断开的解决方案
22 2
|
8天前
|
NoSQL JavaScript Redis
若依后端部署---若依部署,Redis在D盘的project的应用工具当中,在连接过程中,先用Xshell连接若依,RDM在应用工具里,同时host的主机也要写好
若依后端部署---若依部署,Redis在D盘的project的应用工具当中,在连接过程中,先用Xshell连接若依,RDM在应用工具里,同时host的主机也要写好
|
8天前
|
NoSQL Java 关系型数据库
软件开发常用之若依修改之添加数据库,添加redis,利用RDM连接宝塔
软件开发常用之若依修改之添加数据库,添加redis,利用RDM连接宝塔
|
9天前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
|
9天前
|
Java Redis 数据安全/隐私保护
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法