一、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服务对客户端连接的相关配置
1、timeout
检测客户端空闲连接的超时时间,默认timeout=0。
2、maxclients
客户端最大的连接数,默认为10000
3、tcp-keepalive
检测tcp连接活性的周期,默认值为0,建议设置为60,redis会在设定的时期内对它创建的tcp进行活性的检测,防止大量的连接占用系统资源。
4、tcp-backlog
用来设置tcp连接队列的大小,默认值为511,这个参数会受到操作系统的影响。