1. 慢查询
如图,这是客户端请求服务器端的一个生命周期。慢查询是指,查询命令的执行时间较慢,超过了设定好的阈值(系统默认10s)。像我们使用的keys *
命令就很有可能导致慢查询。
慢查询队列的两个参数:
slowlog-log-slower-than:表示队列的阈值,单位微妙
slowlog-max-len:表示慢查询队列的长度
慢查询命令
2. 发布订阅模型
开启一个窗口订阅alibaba:
127.0.0.1:6379> publish alibaba "hello world"
(integer) 0
127.0.0.1:6379> subscribe alibaba
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "alibaba"
3) (integer) 1
1) "message"
2) "alibaba"
3) "hello world"
1) "message"
2) "alibaba"
3) "hello world2"
开启一个窗口发送给alibaba
127.0.0.1:6379> publish alibaba "hello world"
(integer) 1
127.0.0.1:6379> publish alibaba "hello world2"
(integer) 1
因为redis的消息队列实际上是通过list实现的,故发布一个消息,只有一个客户端可以收到,如果有多个客户端同时订阅该频道就会出现"抢"的状况.
3.位图
如图是big的位图,下面的是对应的ASCII。
127.0.0.1:6379> set hello big
OK
127.0.0.1:6379> getbit hello 0 # 获取第1位,是0,如上图
(integer) 0
127.0.0.1:6379> getbit hello 1
(integer) 1
127.0.0.1:6379> getbit hello 2
(integer)
127.0.0.1:6379> setbit hello 7 1 # 设置第7位是1,b就变成了c
(integer) 0
127.0.0.1:6379> get hello
"cig"
127.0.0.1:6379> bitcount hello 0 -1 # 获取位图中1的个数
(integer) 13
4.hyperloglog
是一个算法。相当于用时间换空间的思路减少对内存的占用。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
什么是基数?
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。
命令
PFADD key element [element …] 添加指定元素到 HyperLogLog 中。
PFCOUNT key [key …] 返回给定 HyperLogLog 的基数估算值。这是一个估算值,(错误率0.81%)
PFMERGE destkey sourcekey [sourcekey …] 将多个 HyperLogLog 合并为一个 HyperLogLog
127.0.0.1:6379> pfadd key3 1 3 5 7 8 3 5
(integer) 1
127.0.0.1:6379> pfcount key3
(integer) 5
5.GEO
127.0.0.1:6379> geoadd cityGeo 116.405285 39.904989 "北京" # 添加城市
(integer) 1
127.0.0.1:6379> geoadd cityGeo 121.472644 31.231706 "上海"
(integer) 1
127.0.0.1:6379> geopos cityGeo 北京 # 获取城市经纬度
1) 1) "116.40528291463851929"
2) "39.9049884229125027"
127.0.0.1:6379> geodist cityGeo 北京 上海 # 获取两个城市的距离
"1067597.9668"