客户端
RESP
RESP(Redis Serialization Protocol,Redis序列化协议):服务端与客户端通信协议
1)任何语言只要实现RESP协议,即可调用Redis客户端与服务端Redis通信;
2)Redis客户端只能看到命令的执行结果(RESP解析);
RESP协议发送数据的格式:
*参数个数CRLF
$参数1的字节数CRLF
参数1CRLF
$参数N的字节数CRLF
参数NCRLF
//CRLF代表\r\n,(上述数据在实际传输过程全在一行)
RESP协议返回结果的格式:
回复类型 | 回复前缀 |
---|---|
状态回复 | + |
错误回复 | - |
整数回复 | : |
字符串回复 | $字符串的字节数CRLF |
多条字符串回复 | * |
如:执行“SET hello word”命令转换为RESP的格式
1)发送格式
*3
$3
SET
$5
hello
$5
world
2)结果格式
+OK
redis-py
redis-py:Python语言根据RESP协议实现的Redis客户端
1)使用该客户端前,需下载:pip3 install redis
2)redis-py的命令API沿袭Redis内置命令的API风格
(1)生成Redis客户端格式:
客户端 = redis.StrictRedis(host='服务端IP',port='服务端端口')
1)使用客户端前,需导入依赖库:import redis
(2)调用Redis命令格式:
客户端名.命令(参数)
1)Redis内置命令均可使用(如:SET、GET、HSET和HGETALL等);
2)返回结果也等同于Redis内置命令的返回结果;
(3)通过Pipeline调用命令:
1)创建Pipeline:
Pipeline名 = 客户端名.pipeline(transaction=True或False)
//transaction代表是否使用事务
2)打包命令:
Pipeline名.命令(参数)
3)执行命令
Pipeline名.EXECUTE()
MONITOR
MONITOR命令:监控当前服务端Redis执行的命令
1)可监控任意客户端在服务端执行的命令,并记录详细时间戳等信息;
2)会占用执行该命令的终端以动态显示各命令的详细信息;
MONITOR命令格式:MONITOR
1)若服务端Redis并发量过大,MONITOR客户端的输出缓冲区会暴涨;
//在高并发的Redis中尽量避免使用MONITOR命令(存在阻塞风险)
客户端管理
(1)设置客户端名
CLIENT SETNAME 名称
1)设置成功后返回OK;
2)一般使用IP和端口号作为标识(具有唯一性);
(2)获取客户端名
CLIENT GETNAME
1)返回当前客户端的名称;
(3)阻塞服务端
CLIENT PAUSE N
1)阻塞只能影响普通客户端N毫秒(主从复制的客户端会忽略该命令);
(4)关闭客户端
CLIENT KILL IP:端口
1)关闭成功后返回OK;
CLIENT LIST
CLIENT LIST命令:返回与服务端Redis连接的Redis客户端信息
1)每个换行输出代表一个Redis客户端信息;
如:返回所有Redis客户端信息
字段 | 含义 |
---|---|
id | 客户端ID |
addr | 客户端的IP和端口 |
fd | socket文件描述符 |
name | 客户端名 |
age | 客户端已连接时间 |
idle | 客户端连接后的空闲时间 |
flags | 客户端类型标识 |
db | 客户端正在使用的数据库号 |
sub | 客户端已订阅的频道数量 |
psub | 客户端已订阅的模式数量 |
multi | 当前事务已执行命令个数 |
qbuf | 输入缓冲区总容量 |
qbuf-free | 输入缓冲区剩余容量 |
obl | 固定输出缓冲区的长度 |
oll | 动态输出缓冲区的长度 |
omem | 固定输出缓冲区和动态输出缓冲区的总容量 |
events | 文件描述符事件 |
cmd | Redis客户端最后一次执行的命令(不包含参数) |
1)fd=-1代表当前客户端是Redis内部的伪客户端(不是外部连接);
2)输入缓冲区只能由Redis动态调整(不能超过1G,否则会断开连接);
3)输出缓冲区由固定缓冲区(16KB)和动态缓冲区组成(可指定大小);
4)固定缓冲区和动态缓冲区分别使用字节数组和列表存储数据;
//固定缓冲区用于存储较小的返回结果,动态缓冲区存储较大的
//当固定缓冲区存满后,会将后续的所有返回结果均存储至动态缓冲区
//输入缓冲区和输出缓冲区均不受maxmemory控制
客户端类型有以下10种:
代表符号 | 说明 |
---|---|
N | 普通客户端 |
M | Master节点 |
S | Slave节点 |
O | 客户端正在执行MONITOR命令 |
x | 客户端正在执行事务 |
b | 客户端正在等待阻塞事件 |
d | 受监视的键已被修改 |
u | 客户端未被阻塞 |
c | 命令式连接客户端 |
A | 尽可能快速关闭连接 |