Redis 日志showlog 和 管道pileline
redis日志
slowlog-log-slower-than:指定执行时间超过多少微秒(1秒等于1000000微秒) 的命令请求会被记录到日志上
slowlog-max-len:指定服务器最多保存多少条慢查询操作
设置slowlog有两种方式:
- 方式一:通过配置redis.conf文件进行配置
1 | # 执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录。 |
- 方式二:通过CONFIG命令进行配置
1 | # 配置查询时间超过1毫秒的, 第一个参数单位是微秒 |
1 127.0.0.1:6379 > slowlog get以windows为例查看记录如下
为了方便解说,我设置超时时间为0毫秒,日志记录为1条
那么记录的中的1)2)3)4)分别表示什么呢?
1)表示日志唯一标识符uid
2)命令执行时系统的时间戳
3)命令执行的时长,以微妙来计算
4)命令和命令的参数
做日志查询的时候,可以通过3)来查看是具体的命令运行时间(注意:再强调一次,时间的单位是微妙,但对于一个插入操作来说,10000微妙,也就是10毫秒即0.01秒已经可以算是慢操作了)
需要去查看redis生成的持久型日志,这需要额外去配置一些内容,其中涉及到了集群和分布式,
redis 管道 pileline
1、未使用pipeline执行N条命令
2、使用了pipeline执行N条命令
3、两者性能对比
三、原生批命令(mset, mget)与Pipeline对比
1、原生批命令是原子性,pipeline是非原子性
(原子性概念:一个事务是一个不可分割的最小工作单位,要么都成功要么都失败。原子操作是指你的一个业务逻辑必须是不可拆分的. 处理一件事情要么都成功,要么都失败,原子不可拆分)
2、原生批命令一命令多个key, 但pipeline支持多命令(存在事务),非原子性
3、原生批命令是服务端实现,而pipeline需要服务端与客户端共同完成
4、使用pipeline组装的命令个数不能太多,不然数据量过大,增加客户端的等待时间,还可能造成网络阻塞,可以将大量命令的拆分多个小的pipeline命令完成
5、redis提供了mset、mget方法,但没有提供mdel方法,如果想实现,可以借助pipeline实现。
贴上代码
1 | <?php |
Redis 日志showlog 和 管道pileline