管理连接redis server的客户端

一、redis server管理连接redis客户端的命令

1、查看与redis服务端相连的所有客户端的连接信息

   查看命令:client list

# 查看连接当前redis的所有客户端
127.0.0.1:6379> CLIENT list 
id=3 addr=127.0.0.1:35878 fd=5 name= age=75 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
id=4 addr=192.168.16.128:48120 fd=6 name= age=68 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=30 omem=529848 events=r cmd=keys
id=5 addr=192.168.16.128:48124 fd=7 name= age=51 idle=48 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=keys
id=6 addr=127.0.0.1:35880 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=NULL

客户端信息说明:

(1)客户的基本标识信息

    id:客户端连接的唯一标识,这个id随着redis的连接自增的,重启redis后重置为0

    add:客户端连接的ip和端口

    fd:socket的文件描述符

    name:客户端的名字,可以更改

(2)输入缓存区信息:qbuf(总容量)、qbuf-free(剩余容量)

    输入缓存区的作用是将客户端发送的命令临时保存,redis会从输入缓存区拉取命令并执行,输入缓存取得大小会根据输入内容的大小不同动态调整,但会要求每个客户端的大小不能超过1g,超过后客户端将被关闭。

输入缓存区的监控与优化:

    输入缓存区大小不受maxmemory,如果输入缓存区加redis使用的内存大小超过了maxmemory的限制可能会导致数据丢失、键值淘汰、OOM情况的发生。对此可以监控输入缓存区。

    监控命令:client list

             Info clients

# 使用info监控clients, client_biggest_input_buf代表最大的输入缓存区
127.0.0.1:6379> INFO clients
# Clients
connected_clients:4
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

(3)输出缓存区:obl(固定缓存区长度)、oll(动态缓存区长度)、omem(使用的字节数)

     输出缓存区的作用是保存命令执行的结果返回给客户端、为redis和客户端交互返回结果提供缓存。相对于输入缓存区,输出缓存区的大小可以设置(通过参数cllient-output-buffer-limit设置);输出缓存区的客户端分为三种(普通客户端、发布订阅客户端、slave客户端)。

     输出缓存区由固定输出缓存区(为16kb,返回比较小的执行结果,使用的是字节数组)和动态缓存区(返回大的结果,使用的事列表)组成,固定缓存区慢后会将redis新的返回结果存放在动态缓存区的队列中,队列中的每个对象就是每个返回结果。

     输出缓存区的监控同输入缓存区,其中” client_longest_output_list”代表输出缓存区列表最大的对象数。

(4)客户端的存活状态

     age:客户端连接时间

     idle:客户端最近一次空闲时间。

(5)客户端的类型

    Flag用于表示当前客户端的类型,常见的客户端类型如下:

       N:普通客户端

       M:当前客户端是master节点

       S:当前客户端是slave节点

       o:当前客户端正在执行monitor命令

       x:当前客户端正在执行事务

       b:当前客户端正在等待阻塞事件

       u:客户端未被阻塞

       c:回复完整输出后,关闭连接

       A:尽可能快的关闭连接

(6)其他的参数说明

    db:当前客户端正在使用的数据库的索引下标

    multi:当前事务中已执行命令个数

    events:文件描述符事件,r和w分别代表客户端套接字可读和可写

    cmd:当前客户端最后一次执行的命令

2、获取连接客户端的名称和修改客户端的名称

    修改连接客户端的名称:CLIENT SETNAME

    获取连接客户端的名臣:CLIENT GETNAME

# 修改当前连接的客户端的名称
192.168.16.129:6379> CLIENT SETNAME dayi123
OK
# 获取当前连接的客户端的连接
192.168.16.129:6379> CLIENT GETNAME
"dayi123"

3、杀死连接的客户端

    命令:CLIENT KILL

# 杀死客户端127.0.0.1:3587
192.168.16.129:6379> CLIENT KILL 127.0.0.1:35878
OK

4、阻塞客户端

    命令:CLIENT PAUSE timeout(毫秒)

# 阻塞客户端10秒
192.168.16.129:6379> CLIENT PAUSE 10000
OK

    Clinet pause只对普通和发布订阅客户端有效,对于主从复制是无效的。

5、监控redis正在执行的命令

    命令:MONITOR

# 监控redis正在执行的命令
192.168.16.129:6379> MONITOR
OK
1532152182.921718 [0 127.0.0.1:35880] "ping"
1532152189.738998 [0 127.0.0.1:35880] "DBSIZE"

二、redis服务对客户端连接的相关配置

1timeout

    检测客户端空闲连接的超时时间,默认timeout=0。

2maxclients

    客户端最大的连接数,默认为10000

3tcp-keepalive

    检测tcp连接活性的周期,默认值为0,建议设置为60,redis会在设定的时期内对它创建的tcp进行活性的检测,防止大量的连接占用系统资源。

4tcp-backlog

    用来设置tcp连接队列的大小,默认值为511,这个参数会受到操作系统的影响。

猜你喜欢

转载自blog.csdn.net/dayi_123/article/details/82252872