客户端
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基本操作
- redisTemplate.opsForValue() :操作字符串
- redisTemplate.opsForHash() :操作hash
- redisTemplate.opsForList():操作list
- redisTemplate.opsForSet():操作set
- redisTemplate.opsForZSet():操作zset
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
标识:
- id
- addr
- fd
- name
输入缓冲区:
Redis为每个客户端分配了输入缓冲区,它的作用是将客户端发送的命令临时保存,同时Redis从会输入缓冲区拉取命令并执行
- qbuf 缓冲区的总容量
- qbuf-free 剩余容量
如果Redis的处理速度跟不上输入缓冲区的输入速度 机会造成缓冲区十分大
输出缓冲区:
Redis为每个客户端分配了输出缓冲区,它的作用是保存命令执行的结果返回给客户端
输出缓冲区由两部分组成:固定缓冲区(16KB)和动态缓冲区,其中固定缓冲区返回比较小的执行结果,而动态缓冲区返回比较大的结果。 固定缓冲区使用的是字节数组,动态缓冲区使用的是列表
- obl 固定缓冲区的长度
- oll 动态缓冲区列表的长度
- omem 代表使用的字节数
客户端存活状态:
单位为秒
- age 客户端已经连接的时间
- idle 最近一次的空闲时间
客户端类型:
- flag
setName getName
设置名称方便管理
client setName cxk
client getName
杀掉客户
client kill ip:port
阻塞客户
client pause timeout # 阻塞当前客户端指定毫秒数
监控客户端命令执行
monitor
客户端相关配置
- timeout 检测客户端空闲连接的超时时间,一旦idle时间达到了 timeout,客户端将会被关闭,如果设置为0就不进行检测
- maxclients 客户端最大连接数
- tcp-keepalive 检测TCP连接活性的周期
- tcp-backlog TCP三次握手后,会将接受的连接放入队列中,tcp-backlog就是队列的大小
客户端统计
info clients
- connected_clients:代表当前Redis节点的客户端连接数
- client_recent_max_input_buffer:当前所有输出缓冲区中队列对象个数的最大值
- client_recent_max_output_buffer: 前所有输入缓冲区中占用的最大容量
- locked_clients:正在执行阻塞命令(例如blpop、brpop、brpoplpush)的客户端个数