客户端

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

屏幕截图 2020-09-28 153101

标识:

  • id
  • addr
  • fd
  • name

输入缓冲区:

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

  • qbuf 缓冲区的总容量
  • qbuf-free 剩余容量

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

输出缓冲区:

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

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

  • obl 固定缓冲区的长度
  • oll 动态缓冲区列表的长度
  • omem 代表使用的字节数

客户端存活状态:

单位为秒

  • age 客户端已经连接的时间
  • idle 最近一次的空闲时间

客户端类型:

  • flag

屏幕截图 2020-09-28 152911

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)的客户端个数

results matching " "

No results matching " "

results matching " "

No results matching " "