redis:HyperLogLog&发布订阅(HyperLogLog的概念和命令、redis的发布订阅)

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

 

你可能感兴趣的:(redis:HyperLogLog&发布订阅(HyperLogLog的概念和命令、redis的发布订阅))