【推荐】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
定义
命令
命令 |
说明 |
---|
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的位置 |
应用
数据类型 |
每个userid占用空间 |
需要存储用户量 |
全部内存量 |
---|
set |
32位 |
5000 0000 |
32位*5000 0000=200MB |
bitmap |
1位 |
10000 0000 |
1位*10000 0000=12.5MB |
数据类型 |
每个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 |
注意
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),我们一起学习,一起进步
来源:oschina
链接:https://my.oschina.net/xushuhui/blog/3143429