文章目录

  • 开篇
  • 慢查询日志
  • 慢查询日志服务端配置
  • 动态配置
  • 慢查询日志结构草图:
  • 慢查询使用分析:
  • 发布-订阅功能实现
  • 工作原理:
  • 发布订阅使用
  • pipeline的使用
  • 使用原理
  • 位图(Bitmaps)
  • 实现
  • 使用
  • Hyperloglog
  • Geo使用
  • Geo原理


开篇

慢查询日志

redis的慢查询日志功能用于记录执行时间超过指定时长的命令。

下图描述了一次命令的生命周期,而慢查询工作在第三阶段

redis如何查看慢sql_redis

慢查询日志服务端配置

slowlog-log-slower-than

(单位是微秒,指定超过执行时间的命令会被记录到慢查询日志上)

slowlog-max-len

指定服务器最多保存多少慢查询日志(因为慢查询日志保存的队列是有界的)

动态配置

config set slowlog-log-slower-than 0
// =0 则代表我们想要统计所有命令的执行时间,因为客户端没有给出命令
//>0 则会记录指定时间的命令
//<0 则不记录任何命令
config set slowlog-max-len  5
//指定慢查询日志记录队列为5,慢查询日志记录队列用先进先出链表实现,若达到队列上限,则最先进入队列的日志将会被删除

慢查询日志结构草图:

redis如何查看慢sql_redis如何查看慢sql_02

慢查询日志节点:

redis如何查看慢sql_redis如何查看慢sql_03

redis如何查看慢sql_后端_04

慢查询使用分析:

获取慢查询日志

slowlog get n

慢查询日志重置:

slowlog reset

慢查询日志长度:

slowlog len

慢查询记录的只是命令的执行时间,并不包括命令排队与网络传输时间,因此客户端执行命令时间会远大于实际执行命令时间,如果客户端存在等待超时的话,根据命令执行排队的原理,那么可以检查慢查询日志是否存在慢查询导致客户端命令执行阻塞,而引起慢查询导致的命令级联阻塞。

发布-订阅功能实现

工作原理:

客户端可以订阅一个或多个频道,每当有客户端向被订阅频道发送消息时,频道的所有订阅者都会收到这条消息。

发布订阅使用

// 在频道上发布消息
publish channel message
// 订阅1或多个频道
subscribe channel channel1
//取消订阅
unsubscribe channel channel1
//模式订阅
psubscribe [pattern]  eg:psubscribe music.*
//取消模式订阅
punsubscribe [pattern] 
// 列出至少有1个订阅者的频道
pubsub channels
// 列出给定频道订阅者的数量
pubsub numsub channel 
// 列出被订阅模式的数量
pubsub numpat

pipeline的使用

使用原理

pipeline将一组redis命令进行组装,通过一次网络传输,传输给redis,在将这组redis命令的执行结果按顺序返回给客户端。
使用方式:在高级语言客户端中使用pipeline。redis-cli --pipe
pipeline与原生批量命令的对比:
1:原生批量命令是原子的,而pipeline是非原子的
2:原生批量命令是一个命令对应多个key,pipeline可以支持传输多个命令
3:原生批量命令是redis服务端支持实现的,而pipeline需要服务端和客户端的共同实现。

位图(Bitmaps)

实现

Bitmaps本质上是字符串,可以用bitmaps对字符串的位进行操作。
Bitmaps是一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在bitmaps中叫做偏移量。

使用

//设置键的第offset位的value
setbit key offset value
//获取offset的value
getbit key offset
//获取Bitmaps指定范围值为1的个数
bitcount key [start  end] start与end为字节
//bitmaps集合间的运算
bitop op destkey key1 key2
eg:与运算:bitop and dkey key1 key2
       或运算: bitop or dkey  key1 key2
       非:not 异或:xor
//计算bitmaps中第一个值为targetBit的偏移量
eg:计算第一个值为1的偏移量
bitpos key 1

深入学习bitmaps可以研究不同命令的实现算法,这些在以后可以深入讨论。

Hyperloglog

Hyperloglog基于Hyperloglog算法,利用极小空间数完成独立数量统计
本质上还是字符串

//向hyperloglog添加元素
pfadd key element [elemrnt2]
// 计算hyperloglog的独立总数
pfcount key  [key1]
// 合并多个hyperloglog
pfmerge destkey sourcekey [sourcekey]

redis如何查看慢sql_数据库_05


Hyperloglog缺点:

hyperloglog并不是很精确,在测试情况下,插入100万条数据,根据所得可以发现错误率为0.81%,并且每次pfcount得到数据还不一样。

第二点就是我们没办法得到hyperloglog里面的单条数据。

Geo使用

Geo原理

Geo地理信息定位,存储经纬度,计算两地距离,范围计算。
使用范例:

城市

经度

纬度

简称

北京

116.28

39.55

beijing

天津

117.12

39.08

tianjing

唐山

118.01

39.38

tangshan

// 添加地理信息
geoadd key 经度 纬度 成员名称
//获取成员地理为孩子信息
geopos key member
// 获取两个地理位置的距离
geodist key member1 member2 unit(m,km,mi(英里),ft(尺))

redis如何查看慢sql_数据库_06