Redis学习 Redis性能测试及工具实战(七)
慢查询原因分析:
与mysql一样:当执行时间超过阀值,会将发生时间 耗时 命令记录
redis命令生命周期:发送 排队 执行 返回
慢查询只统计第3个执行步骤的时间
预设阀值:两种方式,默认为10毫秒
- 动态设置6379:> config set slowlog-log-slower-than 10000 //10毫秒10000微秒
使用config set完后,若想将配置持久化保存到redis.conf,要执行config rewrite
2,redis.conf修改:找到slowlog-log-slower-than 10000 ,修改保存即可
注意:slowlog-log-slower-than =0记录所有命令 -1命令都不记录
原理:慢查询记录也是存在队列里的,slow-max-len 存放的记录最大条数,比如设置的slow-max-len=10,当有第11条慢查询命令插入时,队列的第一条命令就会出列,第11条入列到慢查询队列中, 可以config set动态设置,也可以修改redis.conf完成配置。
命令:
获取队列里慢查询的命令:slowlog get 查询返回的结构如下
获取慢查询列表当前的长度:slowlog len //以上只有1条慢查询,返回1
对慢查询列表清理(重置):slowlog reset //再查slowlog len 此时返回0 清空
对于线上slow-max-len配置的建议:线上可加大slow-max-len的值,记录慢查询存长命令时redis会做截断,不会占用大量内存,线上可设置1000以上
对于线上slowlog-log-slower-than配置的建议:默认为10毫秒,根据redis并发量来调整,对于高并发比建议为1毫秒
注意:1,慢查询只记录命令在redis的执行时间,不包括排队、网络传输时间
慢查询是先进先出的队列,访问日志记录出列丢失,需定期执行slow get,将结果存储到其它设备中(如mysql)
redis-cli详解
./redis-cli -r 3 -h 192.168.42.111 -a 12345678 ping //返回pong表示127.0.0.1:6379能通,r代表次数
./redis-cli -a 12345678 -r 100 -i 1 info |grep used_memory_human //每秒输出内存使用量,输100次,i代表执行的时间间隔
./redis-cli -p 6379 -h 192.168.42.111 -a 12345678
对于我们来说,这些常用指令以上可满足,但如果要了解更多
执行redis-cli --help, 可百度
redis-server详解
./redis-server ./redis.conf & //指定配置文件启动
./redis-server --test-memory 1024 //检测操作系统能否提供1G内存给redis, 常用于测试,想快速占满机器内存做极端条件的测试,可使用这个指令
redis上线前,做一次测试
redis-benchmark:基准性测试,测试redis的性能
edis-benchmark -h 192.168.42.111 -c 100 -n 10000 //100个客户端同时请求redis,共执行10000次
会对各类数据结构的命令进行测试
测试命令事例:
1、redis-benchmark -h 192.168.42.111 -p 6379 -c 100 -n 100000
100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能
2、redis-benchmark -h 192.168.42.111 -p 6379 -q -d 100
测试存取大小为100字节的数据包的性能
3、redis-benchmark -h 192.168.42.111 -t set,lpush -n 100000 -q
只测试 set,lpush操作的性能,-q只显示每秒钟能处理多少请求数结果
4、redis-benchmark -h 192.168.42.111 -n 100000 -q script load "redis.call('set','foo','bar')"
只测试某些数值存取的性能, 比如说我在慢查询中发现,大部分为set语句比较慢,我们自己可以测一下Set是不是真的慢