所谓基数计数就是统计不重复元素的个数,典型的场景比如页面uv数,这类计数的特点是需要去重。
第一种思路——精确计数
即存储所有所有不重复元素的值,用一个set数据结构存。比如存储访问某一个页面的全部去重用户id,需要拿计数值时,只需要计算这个set的元素数目即可。
这个set根据场景,可能是内存中一个set数据结果,可能是mysql数据库中的一个表,也可能是redis里的set等等。
这个方案在基数值不大的情况下是可以的,毕竟方案本身足够简单,但是如果基数值很大时,就会有问题,这个set会很大,存储时需要花费很大空间。当然,如果说访问量不大,直接存db,倒也还行。但是如果访问量页很大,需要存入缓存时,比如redis的set,那么这个成本就很高了。所以说这个方案仅适用于基数不大的情况。
第二种思路——概率基数