功能篇
5.1 慢查询日志
当命令执行时间>预设阈值(slowlog-log-slower-than),就会记录下此命令信息。
客户端响应时间=发送时间+排队时间+执行时间+返回时间,没有慢查询不代表不会超时。
可以通过slowlog get [n]查看
可以通过slowlog len 查看日志长度
tips1:慢查询日志以队列的形式存在,可以通过slowlog-max-len设置队列长度,当队列满时,FIFO。
tips2:可以定期slowlog get,然后持久化到MySQL中,做成可视化。
5.2 Redis SHELL
Redis-cli 参数
-r n: repeat n次
-i n: internal 间隔n秒执行,必须配合-r 使用
-x: 用作管道线,将标准输入作为最后一个参数
-c: 连接redis cluster时使用
-a: auth 如果redis配置了密码时使用
--slave: 将client模拟成连接节点的从节点
--rdb: 请求redis实例发送rdb
--pipe: 将多条命令封装成redis通信协议格式,一次发送,
如echo -en '*3\r\n5\r\nhello\r\n4\r\nincr\r\n$7\r\ncounter\r\n' | redis-cli --pipe
--bigkeys: 使用scan命令对redis的键进行采样,从中找到内存占用比较大的键值
--eval: 用于执行lua脚本,参数可以是一个文件,也可以是语句
--latency: 测试客户端到redis实例的网络延迟
--raw: 默认的get是--no-raw,如果get的值是中文,则会返回编码后的数据,只能通过redis-cli --raw get key,非交互式去读到中文数据。
script系:script load, script kill, script exists等,将lua脚本存入redis服务端
Redis-benchmark参数
-c n: clients, 代表客户端的并发数量
-n n: requests数,测试的总请求数
-q 仅显示requests per second信息
-r n: 随机向redis实例中插入键,n为key的后缀修改位数
-P: 代表每个请求pipeline的数据量
-k [0|1]: keepalive, 表示客户端是否使用keepalive
-t [command]: 针对某几种命令进行测试
5.3 pipeline
即 --pipe ,或者使用redis对应语言的客户端实现的函数。
性质:
- 非原子性
5.4 事务
multi开启事务
exec执行
Discard丢弃
性质:
- 简单,不支持回滚
Watch
在multi 开启之前,执行watch key,如果在事务中有对key进行操作,在exec前这个key如果被其他客户端修改了,那么本次事务将执行失败,返回nil
5.5 发现Bigkeys
命令:Redis-cli --bigkeys -i internal(如0.1s)
原理:内部采用分段进行scan操作,把历史扫描过的最大对象
统计出来便于分析优化。
5.6 观测redis实例
- Redis-cli --stat 在requests列中,如果显示+6w以上,说明该redis实例的OPS达到6w以上,已经接近饱和,垂直层面的优化很难达到效果。这时就需要做水平扩展来分摊OPS压力。
- info commandstats 可以分析不合理的命令耗时。
- Info stats 获取 latest_fork_usec ,表示最近一次fork的耗时,如果超过1秒,就需要优化。
- info persistence 获取 aof_delayed_fsync 指标,每次aof的fsync如果发生阻塞,都会加到这个数据上。