⛄导言
本文参考黑马 点评项目
在各个项目中,咱们都或许需要用到UV数据计算功用,这样能够使咱们愈加便利、便利的检查网站的活泼度!
一、HyperLoglog根底用法
⛅HyperLoglog 基本语法、指令
HyperLogLog
- PFADD :将指定元素添加到HyperLogLog
- PFCOUNT:回来存储在HyperLogLog结构体的该变量的近似基数,假如该变量不存在,则回来0
- PFMARGE:将多个 HyperLogLog 兼并(merge)为一个 HyperLogLog , 兼并后的 HyperLogLog 的基数接近于一切输入 HyperLogLog 的可见集合(observed set)的并集.
详见官网: Redis 中文翻译 官方网站 HyperLogLog
⚡HyperLoglog 指令完结功用完成
PFADD指令
使用PFADD 添加数据
PFCOUNT 计算
- 得到基数值,文言就叫做去重值(1,1,2,2,3, 3)的刺进pfcount得到的是3
- 可一次计算多个key
- 时刻复杂度为O(N),N为key的个数
- 回来值是一个带有 0.81% 规范错误(standard error)的近似值.
使用PFCOUNT查询
PFMERGE 兼并
兼并key
HyperLogLog 的应用场景
- 基数不大的、数据量不大就用不上。
- 有局限性,就是只能计算基数数量,没办法计算具体的内容
- 和BitMap相比,属于两种特定计算情况,HyperLogLog比 BitMap去重便利很多
- HyperLogLog 能够 与 BitMap 配合使用,BitMap标识那些用户活泼,HyperLogLog计数
二、UV计算 测验百万数据的计算
☁️什么是UV计算
- UV:全称Unique Visitor,也叫独立访客量,是指通过互联网拜访、阅读这个网页的自然人。1天内同一个用户屡次拜访该网站,只记载1次。
- PV:全称Page View,也叫页面拜访量或点击量,用户每拜访网站的一个页面,记载1次PV,用户屡次打开页面,则记载屡次PV。往往用来衡量网站的流量。
通常来说 UV 会比 PV 大很多,一个网站的独立访客量 和 页面拜访或点击量,肯定是独立访客大的。
UV计算在服务端做会比较费事,因为要判别该用户是否现已计算过了,需要将计算过的用户信息保存。可是假如每个拜访的用户都保存到Redis中,数据量会非常恐怖,那怎样处理呢?
Hyperloglog(HLL)是从Loglog算法派生的概率算法,用于确认非常大的集合的基数,而不需要存储其一切值。
Redis 中的HLL 是基于string数据结构完成的,单个HLL的内存永久小于16kb, 内存极低!作为代价,其丈量结果是概率性的,有小于0.81%的误差。不过对于UV计算来说,这完全能够疏忽。
⚡使用SpringBoot单元测验进行测验百万数据计算
首要进入Redis 检查 内存占用
info memory
中心源码
@Test
void testHyperLoglog() {
String[] values = new String[1000];
int j = 0;
for (int i = 0; i < 1000000; i++) {
j = i % 1000;
values[j] = "user" + i;
if (j == 999) {
//发送至redis
stringRedisTemplate.opsForHyperLogLog().add("hl2", values);
}
}
//计算数量
Long count = stringRedisTemplate.opsForHyperLogLog().size("hl2");
System.out.println("count = " + count);
}
执行后,如下图
再次检查内存占比
能够看出占用大约为14KB,存储上百万数据只占用了14KB数据,可见HyperLogLog的强大!
⛵小结
以上就是【Bug 终结者】对 微服务Spring Boot 整合 Redis 完成 UV 数据计算 的简略介绍,UV数据计算功用是很常用的,在项目中,是一个不错的亮点,计算功用也是各大系统中比较重要的功用,报到完结后,去计算本月的连续 报到记载,来给予奖励,可大大增加用户对系统的活泼度,HyperLogLog能够与BitMap相结合,从而能够能高效的对网站进行深层次的剖析! 技能改动国际!!!
假如这篇【文章】有帮助到你,希望能够给【Bug 终结者】点个赞,创造不易,假如有对【后端技能】、【前端领域】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【Bug 终结者】❤️❤️❤️,我将会给你带来巨大的【收成与惊喜】!