zoukankan      html  css  js  c++  java
  • 【Redis】特殊数据类型

    HyperLogLog 是用来做基数统计的算法。

    先了解下什么是基数。
    比如数据集{1, 3, 5, 7, 5, 7, 8},那么这个数据集的基数集为{1, 3, 5 ,7, 8},基数(不重复元素)为5。

    如果,现在需要统计一下网页的UV,那么就会涉及到去重了,这种场景就很适合用HyperLogLog。

    这不就是set集合嘛?我用set来得出不重复的元素也可以呀。

    没错,是可以,但是当数据量非常大的时候,你这个set是不是会占用非常大的内存呢?
    如果用HyperLogLog来处理就好了,因为它计算基数所需要的空间是一定的,只要12kb,就可以计算接近 2^64 个不同元素的基数。

    但是注意在这个数量级下,是会存在0.81%的错误率的,所以说具体还得看业务是否可以接受这样的错误率。
    像上面说的统计UV的场景,这点错误率是可以忽略的。

    一、pfadd

    将所有元素参数添加到 HyperLogLog 数据结构中。

    pfadd mypf 1 2 3 a b c 3 4 5 c d a
    

    二、pfcount

    返回给定 HyperLogLog 的基数估算值。

    pfcount mypf
    

    可以看到,返回的是9,也就是不重复的元素数量有9个。

    三、pfmerge

    将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。

    pfmerge mypftotal mypf3 mypf4
    

    mypf3、mypf4合并到mypftotal 上。

    --不要用肉体的勤奋,去掩盖思考的懒惰--
  • 相关阅读:
    ztree实现树的异步加载
    form submit提交遇到的问题
    js页面刷新常用的几种方式
    IE6下的按钮效果
    实现两个div并排的三种方式
    继续推荐Android12个自测源码
    优秀程序员实现向卓越程序员跨越
    面试那点事【面试题+面试技巧+职位推荐】
    Android 开发源码分享
    Android 亲测源码分享
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/14905963.html
Copyright © 2011-2022 走看看