Redis其他功能-慢查询,流水线,发布订阅,位图等
慢查询
生命周期
- 发送命令
- 排队
- 执行命令
- 返回结果
在”执行命令”阶段较慢的才是慢查询
相关配置
特点:
- 保存在一个先进先出队列中
- 固定长度
- 保存在内存中
slowlog-max-len : 慢查询队列长度
slowlog-log-slower-than : 慢查询阈值(单位 : 微秒)
0 记录所有命令
<0 不记录任何命令
配置方法
- 默认值
- config get slowlog-max-len = 128
- config get slowlog-log-slower-than = 10000
- 修改配置文件重启–不建议使用,仅初次启动redis时使用
- 动态配置
- config set slowlog-max-len = 1000
- config set slowlog-log-slower-than = 1000
相关命令
- showlog get n : 获取慢查询队列,n表示获取n条记录
- showlog len : 获取慢查询队列长度
- showlog reset : 清空慢查询队列
Tips
- slowlog-log-slower-than不要设置过大,默认10ms,通常设置1ms
- slowlog-max-len不要设置过小,默认128,通常设置1000左右
- 理解redis命令执行的生命周期
- 定期持久化慢查询
流水线(pipeline)
将多次命令打包统一传输到redis上去执行,主要是因为对redis进行操作时,redis本身执行速度是很快的,在复杂的网络环境中,通常大量的时间消耗在了网络传输中,pipeline就是通过将多个命令打包的方式,减少了网络传输次数
使用建议
- 注意每次pipeline携带数据量
- pipeline每次只能作用在一个Redis节点上
- M操作与pipeline区别
发布订阅
角色
- 发布者(publisher)
- 订阅者(subscriber)
- 频道(channel)
命令
- publish channel message : 向channel频道发布消息,返回该频道的订阅者个数
- subscribe channel : 订阅一个或多个频道
- unsubscribe channel : 取消订阅
- psubscribe [pattern] : 可以按照模式订阅
- punsubscribe [pattern] : 可以按照模式退订
位图(Bitmap)
命令
- setbit key offset value : 给位图指定索引设置值,offset偏移量之前未设置的位会补0
- getbit key offset value : 获取位图指定索引的值
- bitcount key [start end] : 获取位图指定范围位值为1的个数(start-end,单位:字节,如果不指定就是获取全部)
- bittop and(交集) | or(并集) | not(非) | xor(异或) destkey [key…] : 做多个Bitmap的and,or,not,xor操作并将结果保存到destkey中
- bitpos key targetBit start end : 计算位图指定范围(start-end,单位字节,不指定获取全部),第一个偏移量的对应的值等于targetBit的位置
简单使用
- 独立用户统计
Tips
- type=string,最大512MB
- 注意setbit时的偏移量,可能有较大耗时
HyperLogLog
本质还是string
命令
- pfadd key element… : 向hyperloglog添加元素,可多个
- pfcount key … : 计算hyperloglog的独立总数
- pfmerge destkey sourcekey … : 合并多个hyperlloglog
Tips
- 有错误率(0.81%)
- 无法取出单条数据
地理信息定位(GEO)
用于存储经纬度,计算两地距离,范围计算等
命令
- geoadd key longitude latitude member : 增加地理位置信息
- geopos key member… :获取地理位置信息
- geodist key member1 member2 [unit] : 获取两个地理位置的距离
- unit : m(米), km(千米), mi(英里), ft(尺)
- georadius : 获取指定位置内地理位置信息集合
Tips
- since 3.2+
- type GeoKey = zset,GEO是使用zset实现的
- 没有删除API : 可以使用zset的命令对GEO进行删除操作