redis详解(3)其他功能

旧时模样 提交于 2019-12-16 10:02:19

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

慢查询

生命周期

1.client发送命令到redis 2.redis排队 3.redis执行命令(慢查询发生阶段) 4.redis返回结果到客户端

两个配置

slowlog-max-len

  • 先进先出队列
  • 固定长度
  • 保存在内存中
  • config get slowlog-max-len=128

slowlog-log-slower-than

  • 慢查询阈值(单位:微秒)
  • slowlog-log-slower-than=0,记录所有命令
  • config get slowlog-log-slower-than=10000

三个命令

  • slowlog get [n]:获取慢查询队列
  • slowlog len:获取慢查询队列长度
  • slowlog reset:清空慢查询队列

运维经验

  • slowlog-max-len不用设置过大,默认10ms,通常设置1ms
  • slowlog-log-slower-than不要设置过小,通常设置1000
  • 理解生命周期
  • 定期持久化慢查询

pipeline

定义

  • client批量打包命令发给server
  • server处理n次后按顺序返回结果
命令 N个命令操作 1次pipeline(n个命令)
时间 n次网络+n次命令 1次网络+n次命令
数据量 1条命令 n条命令
  • redis的命令时间是微妙级别
  • pipeline每次条数要控制(网络时间)

与原生操作对比

  • 非原子命令

使用建议

  • 注意每次pipeline携带数据量
  • pipeline每次只能作用在一个redis节点
  • M操作和pipeline区别

发布订阅

角色

  • 发布者
  • 订阅者
  • 频道

模型

发布者发布消息到redis server,server把消息发送到订阅了指定频道的订阅者

命令

命令 说明
publish channel message 发布命令
subscribe [channel] 订阅一个或多个频道
unsubscribe [channel] 取消订阅一个或多个频道
psubscribe [pattern...] 订阅模式
punsubscribe [pattern...] 退订指定的模式
pubsub channels 列出至少有一个订阅者的频道
pubsub numsub[channel...] 列出给定频道的订阅者数量
pubsub numpat 列出被订阅模式数量

发布订阅与消息队列

  • 发布订阅模式中,订阅了频道的所有订阅者都能收到消息
  • 消息队列模式中,订阅了频道的订阅者中只有一个能收到消息

Bitmap

定义

  • 字符串对应ascii的二进制

命令

命令 说明
setbit key offset value 给位图指定索引设置值
getbit key offset 获取位图指定索引值
bitcount key [start end] 获取位图指定范围(start到end,单位是字节,如果不指定就是获取全部)位值为1的个数
bitop op destkey key [key...] 做多个bitmap的交集、并集、非、异或操作并将结果保存在destkey中
bitpos key targetBit[start][end] 计算位图指定范围(start到end,单位是字节,如果不指定就是获取全部)第一个偏移量对应的值等于targetBit的位置

应用

  • 独立用户统计,1亿用户,5千万独立
数据类型 每个userid占用空间 需要存储用户量 全部内存量
set 32位 5000 0000 32位*5000 0000=200MB
bitmap 1位 10000 0000 1位*10000 0000=12.5MB
  • 1亿用户,10万个独立用户
数据类型 每个userid占用空间 需要存储用户量 全部内存量
set 32位 100 0000 32位*100 0000=4MB
bitmap 1位 10000 0000 1位*10000 0000=12.5MB

注意

  • type=string,最大512MB
  • 注意setbit偏移量,可能有较大耗时

HyperLogLog

定义

  • 基于HyperLogLog算法:极小空间完成独立数量统计
  • 本质还是字符串

命令

命令 说明
pfadd key element [element...] 向hyperloglog添加元素
pfcount key [key...] 计算hyperloglog独立总数
pfmerge destkey sourekey [sourcekey...] 合并多个hyperloglog

注意

  • 错误率0.81%
  • 无法取出单条数据

GEO

定义

  • 地理信息定位,存储经纬度,计算两地距离,范围计算等

命令

命令 说明
geoadd key longitude latitude member [longitude latitude member...] 增加地理位置信息
geopos key member[member...] 获取地理位置信息
geodist key member1 member2 [unit] 获取两个地理位置的距离,unit:m,km,mi,ft
georadius key longitude latitude radius m/km/ft/mi [withcoord][withdist][withhash][COUNT count][asc/desc][store key][storedist key] 获取指定位置范围内的地理位置信息集合

注意

  • 3.2版本后才有该功能
  • type geokey=zset
  • 删除操作 zrem key member

欢迎扫描下方二维码,持续关注:

互联网工程师(id:phpstcn),我们一起学习,一起进步

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!