• Redis之HyperLogLog


    基于HyperLogLog算法 : 极小空间完成独立数量统计,本质还是字符串

    127.0.0.1:6379> pfadd 2019:uuid:id 'u1' 'u2' 'u3'
    (integer) 1
    127.0.0.1:6379> type 2019:uuid:id
    string

    PFADD key element [element ...]

    将除了第一个参数以外的参数存储到以第一个参数为变量名的HyperLogLog结构中。这个命令的一个副作用是它可能会更改这个HyperLogLog的内部来反映在每添加一个唯一的对象时估计的基数(集合的基数)。如果一个HyperLogLog的估计的近似基数在执行命令过程中发了变化, PFADD返回1,否则返回0,如果指定的key不存在,这个命令会自动创建一个空的HyperLogLog结构(指定长度和编码的字符串)。如果在调用该命令时仅提供变量名而不指定元素也是可以的,如果这个变量名存在,则不会有任何操作,如果不存在,则会创建一个数据结构(返回1)。

    127.0.0.1:6379> pfadd 2019:uuid:id 'u1' 'u2' 'u3'
    (integer) 1
    127.0.0.1:6379> pfadd 2019:uuid:id 'u1' 'u2' 'u3'
    (integer) 0

    pfcount key [key..]

    当参数为一个key时,返回存储在HyperLogLog结构体的该变量的近似基数,如果该变量不存在,则返回0。当参数为多个key时,返回这些HyperLogLog并集的近似基数,这个值是将所给定的所有key的HyperLoglog结构合并到一个临时的HyperLogLog结构中计算而得到的。

    127.0.0.1:6379> pfcount 2019:uuid:id
    (integer) 3

    pfmerge

    将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。合并得出的 HyperLogLog 会被储存在目标变量(第一个参数)里面, 如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的。

    127.0.0.1:6379> pfadd 2018:uuid:id 'u1' 'u2' 'u3'
    (integer) 1
    127.0.0.1:6379> pfadd 2019:uuid:id 'u1' 'u2' 'u4'
    (integer) 1
    127.0.0.1:6379> pfmerge age 2019:uuid:id 2018:uuid:id
    OK
    127.0.0.1:6379> pfcount age
    (integer) 4

    注意事项

    1)错误率 : 0.81%

    2)不能获取单条数据

  • 相关阅读:
    DSAPI+DS控件库 Windows7风格控件演示
    DSAPI 键盘鼠标钩子
    DSAPI WIN7磨砂+窗体投影组合
    DSAPI 字符串和文件转Md5字符串
    DS控件库 DS标签的另类用法之折叠展开
    DSAPI 网卡流量监控
    DS控件库 Win7链接列表框效果1:右侧箭头
    DS控件库 DSLed控件呈现滚动字幕效果
    DS控件库 DS按钮多种样式
    DSAPI 简单WebAPI实现
  • 原文地址:https://www.cnblogs.com/yhq-qhh/p/10249204.html
Copyright © 2020-2023  润新知