1、概念
(1)概念
- 用来做基数统计的算法,在输入的元素的数量或者体积非常大的时候,计算基数所需的空间总是固定的,并且是很小的
- 每一个HyperLogLog只需要花费12KB的内存就可以计算接近2的64次方不同元素的基数
- 因为HyperLogLog只会根据输入的元素来计算基数,而不会存储输入元素本身,所以,HyperLogLog不能像集合那样,返回输入的各个元素
- 基数不存在重复的元素,例如:{1,3,4,5,6,6,7,8,9,9}的基数集为{1,3,4,5,6,7,8,9},基数为5,基数估计就是在误差可接受的范围内快速计算基数,但是该误差是在误差允许的范围内
(2)应用
- 基数不大、数据量不到的时候就没必要用基数
- 只能统计基数数量,不能获取具体内容,即:不能存储数据
- 统计每一个用户点击博客的次数,只会计数一次,点击完第一次后,不会再随点击次数的增加而增加访问量
2、HyperLogLog命令
(1)添加指定元素到HyperLogLog中
127.0.0.1:6379> pfadd p1 1 2 3 4 5 6 7 8 9 10 12 22 3 3 455 76 7 788 (integer) 1
(2)返回HyperLogLog的基数估计值
127.0.0.1:6379> pfadd p1 1 2 3 4 5 6 7 8 9 10 12 22 3 3 455 76 7 788 (integer) 1 127.0.0.1:6379> pfcount p1 (integer) 15
祛除重复的元素,一共有15个不重复的元素
(3)合并
127.0.0.1:6379> pfadd p1 1 2 3 4 5 6 7 8 9 10 12 22 3 3 455 76 7 788 (integer) 1 127.0.0.1:6379> pfcount p1 (integer) 15 127.0.0.1:6379> pfadd p2 1 2 3 4 5 6 7 8 9 10 (integer) 1 127.0.0.1:6379> pfmerge p4 p2 p1 OK 127.0.0.1:6379> pfcount p4 (integer) 15
将p1和p2的基数集合并为p4基数集,并求出p4的基数
3、Redius发布的订阅
(1)概念
redis的发布订阅是一种消息通讯模式,发布者发送消息,接收者接收消息
redis客户端可以订阅任意数量的频道
(2)应用
关注公众号、微博等,关注后发送消息能够及时接收。
(3)命令
先开启两个窗口
利用一个窗口订阅频道cctv1,但是未接收到消息,一直处于线程阻塞状态
127.0.0.1:6379> subscribe cctv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "cctv1"
3) (integer) 1
在另一个窗口发布消息:
127.0.0.1:6379> publish cctv1 nihao
(integer) 1
在发布的同时,另一个窗口接受到了该窗口发布的消息:
127.0.0.1:6379> subscribe cctv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "cctv1"
3) (integer) 1
1) "message"
2) "cctv1"
3) "nihao"
取消订阅的命令:
127.0.0.1:6379> unsubscribe cctv1
1) "unsubscribe"
2) "cctv1"
3) (integer) 0