• redis 连接工具_redis之timeout(默认建议为0) , maxclients(重要)


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

     

    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,有用分布式锁的情况下,看业务场景
      配置默认空闲超时时间为60s
    • 4,config rewrit 保存
      可在redis.conf 配置文件中添加重启生效。

    最近在迁移redis集群,至于数据就是通过之前说的redis-migrate-tool工具做的同步迁移,迁移完成后,程序也修改了redis连接地址,但是redis服务端连接却没有释放,这个问题就是因为redis默认timeout没有做修改,无论连接是否空闲,长期保持连接状态。

    下面是检查配置步骤:

    登陆redis集群

    [root@db-2-19 ~]# redis-cli -h 127.0.0.1 -p 1000 -c10.10.2.19:1000> auth 123456

    查看redis的配置timeout(当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能)

    127.0.0.1:1000> config get timeout 

    配置超时

    127.0.0.1:1000> config set timeout 0    //默认

    查看连接状态

    [root@db-2-19 ~]# lsof -i:1000[root@db-2-19 ~]# netstat -antp | grep 1000

    注:如果是集群模式,那么每个节点都得需要修改。

     

    ##redis客户端连接数

     redis通过监听一个TCP端口或socket的方式接收来自客户端的连接,
    当与客户端建立连接后,redis内部会进行如下操作:
    (1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞多路复用模型;
    (2)然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法;
    (3)然后创建一个可读的文件事件用于监听这个客户端socket的数据发送。

    ##redis连接数与最大连接数

    1.查看

    复制代码
    方法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>
    复制代码

     2.设置、修改

    复制代码
    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>
    
    
    3.启动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
  • 相关阅读:
    自动部署基于Maven的war文件到远程Tomcat
    解决Eclipse中新创建的Maven项目不自动创建web.xml文件
    JFreeChart
    hibernate
    hibernate
    hibernate
    hibernate
    Hibernate
    hibernate关联关系映射详解
    Hibernate获取数据java.lang.StackOverflowError
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15903942.html
Copyright © 2020-2023  润新知