• 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
  • 相关阅读:
    MyISAM、InnoDB在频繁插入删除情况下的不同
    Solarized ----vim配色方案
    SVN命令使用详解
    好的网页
    snort在WinXP下的集成式安装
    matlab连接数据库
    KDD数据导入sqlserver2005数据库
    snort在使用过程中遇到的问题:抓不到包
    snort在使用过程中遇到的问题:ERROR: OpenAlertFile() => fopen() alert file log/alert.ids:No such file or directory
    将iso文件刻录为CD或DVD【转】
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13287295.html
Copyright © 2020-2023  润新知