文章目录
- 一、性能分析
- 1、redis慢查询分析
- 2、慢查询阈值设置(默认10ms)
- 3、慢查询记录原理
- 4、获取慢查询记录命令
- 5、redis性能压测
- 6、redis运行原理流程
- 7、redis单个指令批量操作误区和PIPELINE操作流程
- 二、事物: 弱事物
- 1、multi:开始事物、exec:结束事物
- 2、discard:取消事务,放弃执行事务块内的所有命令
- 3、事物中一组指令,出现语法错误的指令,那么这组指令执行失败
- 4、watch命令:使用watch后, multi失效,事务失效
- 四、redis发布与订阅
- 五、Resp 协议
一、性能分析
1、redis慢查询分析
2、慢查询阈值设置(默认10ms)
1),动态设置6379:> config set slowlog-log-slower-than 10000 //10毫秒
使用config set完后,若想将配置持久化保存到redis.conf,要执行config rewrite
2),redis.conf修改:找到slowlog-log-slower-than 10000 ,修改保存即可
注意:slowlog-log-slower-than =0记录所有命令 -1命令都不记录
3、慢查询记录原理
慢查询记录也是存在队列里的,slow-max-len 存放的记录最大条数,
比如设置的slow-max-len=10,当有第11条慢查询命令插入时,队列的第一条命令就会出列,第11条入列到慢查询队列中, 可以config set动态设置,也可以修改redis.conf完成配置
4、获取慢查询记录命令
获取队列里慢查询的命令:slowlog get
获取慢查询列表当前的长度:slowlog len
1),对慢查询列表清理(重置):slowlog reset //再查slowlog len 此时返回0 清空;
2),对于线上slow-max-len配置的建议:线上可加大slow-max-len的值,记录慢查询存长命令时redis会做截断,不会占用大量内存,线上可设置1000以上
3),对于线上slowlog-log-slower-than配置的建议:默认为10毫秒,根据redis并发量来调整,对于高并发比建议为1毫秒
4),慢查询是先进先出的队列,访问日志记录出列丢失,需定期执行slowlog get,将结果存储到其它设备中(如mysql)
5、redis性能压测
- 1、redis-benchmark -h 192.168.42.111 -p 6379 -c 100 -n 10000
100个并发连接,10000个请求,检测服务器性能 - 2、redis-benchmark -h 192.168.42.111 -p 6379 -q -d 100
测试存取大小为100字节的数据包的性能 - 3、redis-benchmark -h 192.168.42.111 -p 6379 -t set,get -n 100000 -q
只测试 set,lpush操作的性能 - 4、redis-benchmark -h 192.168.42.111 -p 6379 -n 100000 -q script load
“redis.call(‘set’,‘foo’,‘bar’)”
只测试某些数值存取的性能
6、redis运行原理流程
发送命令-〉命令排队-〉命令执行-〉返回结果
7、redis单个指令批量操作误区和PIPELINE操作流程
单个指令批量操作流程
PIPELINE操作流程
使用pipeline
public static void delNoPipe(String...keys){
Jedis jedis = new Jedis(RedisTools.ip,RedisTools.port);
Pipeline pipelined = jedis.pipelined();
for(String key:keys){
pipelined.del(key);//redis?
}
pipelined.sync();//
jedis.close();
}
pipeline 执行的一组件命令中,如果有一个命令执行失败,不会影响其它命令执行结果
二、事物: 弱事物
1、multi:开始事物、exec:结束事物
事物中执行一组指令,其中有一个指令执行失败,指令类型错误,语法正确,不影响其它指令执行,且执行成功的数据不会回滚。
2、discard:取消事务,放弃执行事务块内的所有命令
3、事物中一组指令,出现语法错误的指令,那么这组指令执行失败
4、watch命令:使用watch后, multi失效,事务失效
2个客户端监听同一个Key
客户端A:
客户端B:
客户端A:
四、redis发布与订阅
发布:
订阅:
五、Resp 协议
Redis 服务器与客户端通过 RESP(REdis Serialization Protocol)协议通信。
主要以下特点:容易实现,解析快,人类可读.
RESP 底层采用的是 TCP 的连接方式,通过 tcp 进行数据传输,然后根据解析规则解析相 应信息,完成交互。
Resp 协议的结构.
*3 ----->表示有3组数据
$3 ------->下面跟的指令长度为3
set -------->所根指令
$4 ------->下面跟的指令长度为5
name
$5 ------->下面跟的指令长度为5
clock
RESP协议包含:数据组数,指令长度,指令