玩转Redis-HyperLogLog原理探索
《玩转Redis》系列文章主要讲述Redis的基础及中高级应用。本文是《玩转Redis》系列第【10】篇,最新系列文章请前往 公众号“zxiaofan” 查看,或 百度搜索“玩转Redis zxiaofan” 即可。 本文关键字:玩转Redis、HyperLogLog原理、基数缓存、密集存储结构和稀疏存储结构; 大纲 伯努利试验 HyperLogLog结构 HyperLogLog对象头 pfcount及基数缓存 pfadd底层逻辑 密集存储结构和稀疏存储结构 HyperLogLog引发的思考 名词解释: 1、基数 :集合中不重复元素的个数; 2、HLL :HyperLogLog 的简写; 概要 上文 《玩转Redis-HyperLogLog统计微博日活月活》 介绍了牛逼哄哄的HyperLogLog,传入元素数量或体积非常大时,HLL所需空间固定且很小。12kb内存可计算接近 2^64 个不同元素的基数。如此厉害,怎能不继续深入探索呢? PS:看完这篇文章,你会发现HyperLogLog能统计的基数值实际并不是 2^64 。 1. 伯努利试验 介绍HyperLogLog底层原理前,我们先了解下伯努利试验(援引百度百科)。 伯努利试验(Bernoulli experiment)是在同样的条件下重复地、相互独立地进行的一种随机试验。 其特点是该随机试验只有两种可能结果