通过这篇文章你会知道如下:
-
如何查询目前连接的客户端信息?以及显示的客户端信息各个值代表什么?
1. client list命令结果说明
client list命令能列出与Redis服务端相连的所有客户端连接信息
info clients命令显示最大的缓冲区如如果有大量的client,则可以通过 redis-cli client list | grep 命令进行查找
-
客户端标识的四个属性:id、 addr、 fd、 name
client setName xx 设置客户端名称
client getName
id 客户端连接唯一标识
fd socket的文件描述符, 与lsof命令结果中的fd是同一个, 如果fd=-1
代表当前客户端不是外部客户端, 而是Redis内部的伪装客户端
flags:客户端类型 N普通客户端,S,slave节点
-
输入缓冲区: qbuf(总容量)、 qbuf-free(剩余容量),限制1G容量
Redis为每个客户端分配了输入缓冲区, 它的作用是将客户端发送的命令临时保存, 同时Redis从会输入缓冲区拉取命令并执行, 输入缓冲区为客户端发送命令到Redis执行命令提供了缓冲功能
同时输入缓冲区和输出缓冲区都不受maxmemory控制,所以超过限制则会引起数据的丢失等等的一些情况
-
输出缓冲区: obl(固定buf长度)、 oll(动态buf的长度)、 omem(使用的字节数)
redis为每个客户端分配了输出缓冲区, 它的作用是保存命令执行的结果返回给客户端, 为Redis和客户端交互返回结果提供缓冲。
通过client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>配置。
- <class>: 客户端类型, 分为三种。 a) normal: 普通客户端; b)
- slave: slave客户端, 用于复制; c) pubsub: 发布订阅客户端。
- <hard limit>: 如果客户端使用的输出缓冲区大于<hard limit>, 客户端会被立即关闭。
- <soft limit>和<soft seconds>: 如果客户端使用的输出缓冲区超过了<softlimit>并且持续了<soft limit>秒, 客户端会被立即关闭
- 输出缓冲区是有固定和动态两部分构成的,固定缓冲区使用的是字节数组, 动态缓冲区使用的是列表。 当固定缓冲区存满后会将Redis新的返回结果存放在动态缓冲区的队列中, 队列中的每个对象就是每个返回结果
- client list中的obl代表固定缓冲区的长度, oll代表动态缓冲区列表的长度, omem代表使用的字节数
-
客户端存活状态:age ,idle
age(当前客户端已经连接的时间)
idle:最近一次空闲的时间,表示服务端没有收到命令进行处理
-
客户端限制连接:maxclients,
Redis提供了maxclients参数来限制最大客户端连接数, 一旦连接数超过maxclients, 新的连接将被拒绝。 maxclients默认值是10000, 可以通过infoclients来查询当前Redis的连接数
动态设置连接数:config set maxclients 50
动态设置连接的空闲时间:config set timeout 30,idle时间超过timeout则关闭连接,0是不进行检测
-
杀掉指定的IP和端口的客户端client kill ip:port
2.info clients结果说明
1) connected_clients: 代表当前Redis节点的客户端连接数, 需要重点监控, 一旦超过maxclients, 新的客户端连接将被拒绝。
2) client_longest_output_list: 当前所有输出缓冲区中队列对象个数的最大值。
3) client_biggest_input_buf: 当前所有输入缓冲区中占用的最大容量。
4) blocked_clients: 正在执行阻塞命令(例如blpop、 brpop、brpoplpush) 的客户端个数
info stats中的两个客户端统计信息:
total_connections_received: Redis自启动以来处理的客户端连接数总数。
rejected_connections: Redis自启动以来拒绝的客户端连接数, 需要重点监控