威海网站建设联系方式,wordpress什么编辑器好用吗,泰安网站制作电话,中国建筑有限公司官网一、HyperLogLog概述HyperLogLog并不是一种新的数据结构#xff08;实际类型为字符串类型#xff09;#xff0c;而是一种基数算法#xff0c;通过HyperLogLog可以利用极小的内存空间完成独立总数的统计#xff0c;数据集可以是IP、Email、ID等HyperLogLog提供了3个命令实际类型为字符串类型而是一种基数算法通过HyperLogLog可以利用极小的内存空间完成独立总数的统计数据集可以是IP、Email、ID等HyperLogLog提供了3个命令pfadd、pfcount、pfmerge 二、添加pfaddpfadd key element [element …]pfadd用于向HyperLogLog添加元素如果添加成功返回1例如下面向一个名为2016_06_06:unique:ids的hyperloglog中添加4个元素 三、计算独立用户数pfcountpfcount key [key …]pfcount用于计算一个或多个HyperLogLog的独立总数例如接着上面的演示案例2016_03_06:unique:ids的独立总数为4 内存节省效果演示案例①插入前使用info memory查看一下内存占用率 ②下面建立一个名为test.sh的脚本执行该脚本向key为2016_05_01:unique:ids的HyperLogLog中插入100万个元素循环每次插入1000条elements
key2016_05_01:unique:ids
for i in seq 1 1000000
do
elements${elements} uuid-${i}
if [[ $((i%1000)) 0 ]];
then
redis-cli pfadd ${key} ${elements}
elements
fi
done③执行完脚本之后再次查看内存发现内存只增加了14K左右④但是使用pfcount查看结果发现执行的结果并不止100万个⑤现在改为使用集合类型进行测试那么可以看到内存使用率在脚本执行完之后涨到了几十MB但是独立用户数为100万elements
key2016_05_01:unique:ids:set
for i in seq 1 1000000
do
elements${elements} ${i}
if [[ $((i%1000)) 0 ]];
then
redis-cli sadd ${key} ${elements}
elements
fi
done
下图列出了使用集合类型和HperLogLog统计百万级用户的占用空间对比数据类型1天1月1年集合类型80M2.4G28GHperLogLog15K450K5M可以看到HyperLogLog内存占用量小得惊人但是用如此小空间来估算如此巨大的数据必然不是100%的正确其中一定存在误差率。Redis官方给出的数字是0.81%的失误率四、合并pfmergepfmerge destkey sourcekey [sourcekey ...]pfmerge可以求出多个HyperLogLog的并集并赋值给destkey例如要计算 2016年3月5日和3月6日的访问独立用户数可以按照如下方式来执行可以看到最终独立用户数是7五、HyperLogLog优缺点与使用建议HyperLogLog内存占用量非常小但是存在错误率开发者在进行数据结构选型时只需要确认如下两条即可只为了计算独立总数不需要获取单条数据可以容忍一定误差率毕竟HyperLogLog在内存的占用量上有很大的优势