redis学习笔记(3) | 青训营

82 阅读3分钟

功能篇

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\n3\nSET˚\n˚3\r\nSET\r\n5\r\nhello\r\n5\nworld˚\n˚2\n˚5\r\nworld\r\n*2\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对应语言的客户端实现的函数。

性质:

  1. 非原子性

5.4 事务

multi开启事务

exec执行

Discard丢弃

性质:

  1. 简单,不支持回滚

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如果发生阻塞,都会加到这个数据上。