慢查询
生命周期
- 发送命令
- 排队(单线程特性)
- 执行命令(慢查询发生的阶段, 客户端超时不一定是慢查询导致的.慢查询只是一个因素)
- 返回执行结果
两个配置
- slowlog-max-len default =128
慢查询队列是先进先出的, 固定长度, 保存在内存内
- slowlog-log-slower-than default = 1000
慢查询阈值(单位:微妙) , =0 记录所有的命令(所有的命令都设置未慢查询) , < 0 任何记录都不设置为慢查询
动态配置命令
config set slowlog-max-len 1000
config set slowlog-log-slower-than 1000
三个命令
- slowlog get [n] : 获取慢查询队列
- slowlog len : 获取慢查询队列长度
- slowlog reset : 清空慢查询队列
运维经验
- slowlog-max-len 不要设置太大, 默认10ms, 通常1ms
- slowlog-log-slower-than 不要设置过小,通常1000左右
- 理解命令的生命周期
- 定期持久化慢查询(防止历史慢查询丢失,队列长度有限)
pipeline
打包命令批量处理,避免多次网络耗时
Pipline pipline=Jedis.pipline
- 注意每次pipeline 携带的数据量
- pipeline每次只能作用在一个Redis节点上
- 与M操作的区别
发布订阅
角色
- publisher
- subscriber
- channel
模型
publisher发送消息到channel中,subscriber 接收消息,无法获取历史消息
API
- publish channel message 返回指定频道的订阅者
- subscribe channel 订阅
- unsubcribe 取消订阅
其他
psubscribe pattern # 订阅模式
…
消息队列
发布
Bitmap
- getbit key offset 直接操作位
- setbit key offset value 设置指定位图的索引的位置的值0/1,空缺处补0,可能会非常耗时
- bitcount key start end 获取指定索引中值为1 的个数
- bitop op destkey key [key] 做多个Bigmap的 and , or not
- bitpos key targetBit [start][end] 计算指定索引范围内的和target相等的个数
type=string 最大512M
HyperLogLog
基于HyperLogLog的算法: 用极小的空间完成独立的数量统计
本质还是字符串,独立用户数的统计,占用内存极小(优点),但是有错误率(0.81%),无法获取单条数据。
API
- pfadd key element [element]: 添加
- pfcount key [key] : 计算hyperloglog的独立总数
- pfmerge destkey sourcekey [sourcekey] : 合并多个hyperloglog
GEO
3.2 版本后添加的内容,地理信息定位:存储经纬度,计算两地距离,范围计算等。
应用场景:微信摇一摇,在地图上按照距离查找目标,使用zset实现的,可以使用zset的删除命令执行删除操作
API
- geoadd 添加
- geopos 获取
- geodist 计算距离,支持指定距离单位
- georadius 计算指定范围内的member, 有点复杂,待研究