客户端

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 helloset hello worldexec # 提交事务# discard 停止事务执行

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

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

标识:

输入缓冲区:

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

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

输出缓冲区:

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

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

客户端存活状态:

单位为秒

客户端类型:

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

setName getName

设置名称方便管理

client setName cxkclient getName

杀掉客户

client kill ip:port

阻塞客户

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

监控客户端命令执行

monitor

客户端相关配置

客户端统计

info clients