持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
慢查询
说明:
1、慢查询发生在执行命令阶段
2、客户端超时不一定慢查询,但慢查询是客户端超时的一个可能因素
两个配置
可以动态设置
1、slowlog-max-len:默认值128
先进先出队列
固定长度
保存在内存内
2、slowlog-log-slower-than:默认值10000(10微秒)
慢查询阈值(单位:微秒 = 1毫秒/1000)
slowlog-log-slower-than=0,记录所有命令
slowlog-log-slower-than<0,不记录任何命令
命令
1、slowlog get [n]:获取慢查询队列
2、slowlog len:获取慢查询队列长度
3、slowlog reset:清空慢查询队列
经验
1、slowlog-max-len不要设置过小,默认128,通常设置1000左右
2、slowlog-log-slower-than不要设置过大,默认10ms,通常设置1ms
3、定期持久化慢查询,如存mysql
pipeline(流水线)
1次pipeline(n条命令) = 1次网络时间+n次命令时间
redis命令是微秒级别,pipeline减少网络多次请求
原生M操作是原子性的,pipeline不是原子性的,redis提供简单事物,不支持回滚,如果执行事务中,监控的key改变会导致提交事物失败
避免每次pipeline携带命令数量
pipeline每次只能作用在一个节点,所以集群不支持pipeline,但是可以自定义实现
发布订阅
类似生产者消费者模式
订阅者都收到消息
消息队列消息需要抢
角色:发布者,订阅者,频道
API
1、publish channel message:将消息message发布到频道channel,返回订阅人数
2、subcribe [channel]:订阅一个或多个频道
3、unsubcribe [channel]:取消订阅一个或多个频道
4、psubscribe [pattern...]:订阅模式
5、punsubscribe [pattern...]:退订指定模式
6、pubsub channels:列出至少有一个订阅者的频道
7、pubsub numsub [channel...]:列出给定频道的订阅者数量
8、pubsub numpat:列出被订阅模式的数量
位图Bitmap
1、基于最小的单位bit进行存储,所以非常省空间。
2、设置时候时间复杂度O(1)、读取时候时间复杂度O(n),操作是非常快的
3、二进制数据的存储,进行相关计算的时候非常快
4、方便扩容
5、type = string,最大512MB
使用场景 :
1、用户签到
原理:以用户ID为KEY,以当前时间距离开始时间的时间差为偏移量,若用户签到一次,则将位置为 1。最后 bitcountKEY,获取用户一共签到的次数。
2、用户在线状态
方案:使用bitmap存储用户在线状态。使用一个KEY,若用户在线,则以用户ID位偏移量,将位设为 1;若不在线,则设置为 0。
3、统计活跃用户
方案:若某用户上线,则以日期为KEY,以用户user_id为偏移量(若ID不为整数,则将ID hash化为唯一ID),设置位为 1
4 、各种状态值
API
1、setbit key offset value:给位图指定索引设置值
2、getbit key offset:获取位图指定索引的值
3、bitcount key [start end]:获取位图指定范围(start到end,单位为字节,如果不指定就是获取全部)位值为1的个数
4、bitop op destkey key[key...]:多个bitmap的and(交集)、or(并集)、not(非)、xor(异或)操作并将结果保存在destkey中
5、bitpos key targetBit [start end]:计算位图指定范围(start到end,单位为字节,如果不指定就是获取全部)第一个偏移量对应的值等于targetBit的位置
注意:注意setbit时的偏移量,可能有较大耗时;位图在数据量大的时候使用合理
HyperLogLog
1、基于HyperLogLog算法:极小空间完成独立数量统计
2、本质是字符串
API
1、pfadd key element [element...]:向hyperloglog添加元素
2、pfcount key [key....]:计算hyperloglog的独立总数
3、pfmerge destkey sourcekey [sourcekey...]:合并多个hyperloglog
注意
1、有错误率:0.81%
2、无法取出单条数据
GEO
地理信息定位:存储经纬度,计算两地距离,范围计算。。。
3.2版本以后提供的
类型是有序集合
没有删除API:可以使用zrem key member
API
1、geoadd key longitude latitude member [longitude latitude member...]:增加地理位置信息
2、geopos key member [member]:获取地理位置信息
3、geodist key member1 member2 [unit]:获取两地地理位置距离,unit:m(米)、km(千米)、mi(英里)、ft(尺)
4、georadius key longitude latitude radius m|km|gt|mi [WITHCOORD][WITHDIST] [WITHHASH][ASC|DESC] [COUNT count] :以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的而所有位置元素。
选项:
- WITHDIST:在返回位置元素的同时,将位置元素与中心之间的距离也一并返回。
- WITHCOORD:将位置元素的经度和纬度也一并返回。
- WITHHASH:以52位有符号整数的形式,返回位置元素经过原始geohash编码的有序集合分值。这个选项主要用于底层应用或者调试,实际中的作用并不大。
- ASC:根据中心的位置,按照从近到远的方式返回位置元素
- DESC:根据中心的位置,按照从远到近的方式返回位置元素