Redis之HyperLogLog类型 Love The Way You Lie 2023-01-12 10:19 83阅读 0赞 ##### HyperLogLog(基数统计) ##### **什么是基数?** 不相同的数叫做基数。 -------------------- **问题的引入:** 在传统时期,如果你要计算一个网页的访问量,如何计算?做法是将用户的唯一标识存入一个set集合中,然后获取set的集合元素的大小。当集合元素量比较小的时候,效果还行,当用户量超大时,这个集合或者多个集合占用的储存量太大了。我们只不过想要个访问量这个数字而已,但却要存储这么多无效信息,不划算。 HyperLogLog不是集合,不会存储元素本身,而是添加的时候计数不重复元素的一种算法,不是redis独有的。当添加量非常大时,存在0.81%标准误差。HyperLogLog最大只占12KB内存,可以计算近264元素的基数。 如果你用集合去存264个元素,内存多少?可以自己算算。 假设存long型数字,一个long型8个字节,即8B,(264 \* 8)/ (1024 \* 1024 \* 1024) = 237 G,再看看自己电脑几个G,根本无法存这么多。 HyperLogLog的应用场景:访问量,在线人数,搜索次数,注册人数,等待。 HyperLogLog命令只有三个:PFadd添加,PFcount获取基数,PFmerge合并 -------------------- **常用命令:** (1)添加基数:PFadd key element \[element…\] ![在这里插入图片描述][2021012811323864.png] 返回值:基数发生改变返回1,未改变返回0。 当不指定元素,即PFadd key时,key不存在时创建一个空的key,返回1。 -------------------- (2)获取基数:PFcount key \[key…\] ![在这里插入图片描述][20210128113251677.png] -------------------- (3)基数合并:PFmerge destKey sourceKey \[sourceKey…\] 合并后的基数近似所有输入元素的基数。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpcGl6aGVuXw_size_16_color_FFFFFF_t_70] -------------------- [2021012811323864.png]: /images/20221119/dcd9237ec04044edaab9df7ac7fa675f.png [20210128113251677.png]: /images/20221119/afece8c2079345f39eb68cce5f3e4212.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpcGl6aGVuXw_size_16_color_FFFFFF_t_70]: /images/20221119/d7a579c65cce460fadb063a3744d4f1f.png
还没有评论,来说两句吧...