客户端

RESP(redis 序列化协议)

*< 参数数量 > CRLF
$< 参数 1 的字节数量 > CRLF
< 参数 1> CRLF
...
$< 参数 N 的字节数量 > CRLF
< 参数 N> CRLF

状态回复:在RESP中第一个字节为"+"。

错误回复:在RESP中第一个字节为"-"。

整数回复:在RESP中第一个字节为":"。

字符串回复:在RESP中第一个字节为"$"。

多条字符串回复:在RESP中第一个字节为"*"。

java 客户端 Jedis

基本使用

Jedis jedis = new Jedis("127.0.0.1");

jedis.set("name","my");
System.out.println(jedis.get("name"));
jedis.close();

连接池

JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(15);
config.setMaxTotal(30);

JedisPool pool = new JedisPool(config);

Jedis resource = pool.getResource();
System.out.println(resource.ping());
resource.close();

pool.close();

Spring Data Redis

RedisTemplate基本操作

StringRedisTemplate是K,V均为String的RedisTemplate

使用

template.opsForValue().set("name","hello,bitch");

事务

multi # 开启事务
set name hello
set hello world
exec # 提交事务
# discard 停止事务执行

命令语法错误导致的错误整个事务会回滚

set key java
watch key
multi
set key cxk
exec # 如果key在这个事务过程中别其他客户端修改 这个事务就不会执行
// 开启事务支持
template.setEnableTransactionSupport(true);
try{
    // begin
    template.multi();
    // 事务中的多个命令被一次性发送给服务器
    template.opsForValue().set("java","langeuage");
    template.opsForValue().set("python","langeuage");
    // commit
    template.exec();    
}catch (Exception e){
    template.discard();
}

客户端管理

client list
id=10733 addr=127.0.0.1:42158 fd=9 name= age=84021 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client user=default
序号 参数 含义
1 id 客户端连接id
2 addr 客户端连接P和端口
3 fd socket的文件描述符
4 name 客户端连接名
5 age 客户端连接存活时间
6 idle 客户端连接空闲时间
7 flags 客户端类型标识
8 db 当前客户端正在使用的数据库索引下标
9 sub/psub 当前客户端订阅的频道或者模式数
10 multi 当前事务中已执行命令个数
11 gbuf 输入缓冲区总容量
12 gbuf-free 输入缓冲区剩余容量
13 obl 固定缓冲区的长度
14 oll 动态缓冲区列表的长度
15 omem 固定缓冲区和动态缓冲区使用的容量
16 events 文件描述符事件(r/w):r和w分别代表客户端套接字可读和可写
17 cmd 当前客户端最后一次执行的命令,不包含参数

标识:

输入缓冲区:

Redis为每个客户端分配了输入缓冲区,它的作用是将客户端发送的命令临时保存,同时Redis从会输入缓冲区拉取命令并执行

如果Redis的处理速度跟不上输入缓冲区的输入速度 机会造成缓冲区十分大

输出缓冲区:

Redis为每个客户端分配了输出缓冲区,它的作用是保存命令执行的结果返回给客户端

输出缓冲区由两部分组成:固定缓冲区(16KB)和动态缓冲区,其中固定缓冲区返回比较小的执行结果,而动态缓冲区返回比较大的结果。 固定缓冲区使用的是字节数组,动态缓冲区使用的是列表

客户端存活状态:

单位为秒

客户端类型:

序号 客户端类型 说明
1 N 普通客户端
2 M 当前客户端是master节点
3 S 当前客户端是slave节点
4 O 当前客户端正在执行monitor命令
5 X 当前客户端正在执行事务
6 b 当前客户端正在等待阻塞事件
7 i 当前客户端正在等待VM I/O,但是此状态目前已经废弃不用
8 d 一个受监视的键已被修改,EXEC命令将失败
9 u 客户端未被阻塞
10 c 回复完整输出后,关闭连接
11 A 尽可能快地关闭连接

setName getName

设置名称方便管理

client setName cxk
client getName

杀掉客户

client kill ip:port

阻塞客户

client pause timeout # 阻塞当前客户端指定毫秒数

监控客户端命令执行

monitor

客户端相关配置

客户端统计

info clients