⛄导言

本文参考黑马 点评项目

在各个项目中,咱们都或许需要用到UV数据计算功用,这样能够使咱们愈加便利、便利的检查网站的活泼度!

一、HyperLoglog根底用法

⛅HyperLoglog 基本语法、指令

HyperLogLog

  • PFADD :将指定元素添加到HyperLogLog
  • PFCOUNT:回来存储在HyperLogLog结构体的该变量的近似基数,假如该变量不存在,则回来0
  • PFMARGE:将多个 HyperLogLog 兼并(merge)为一个 HyperLogLog , 兼并后的 HyperLogLog 的基数接近于一切输入 HyperLogLog 的可见集合(observed set)的并集.

详见官网: Redis 中文翻译 官方网站 HyperLogLog

微服务Spring Boot 整合 Redis 实现 UV 数据统计

⚡HyperLoglog 指令完结功用完成

PFADD指令

微服务Spring Boot 整合 Redis 实现 UV 数据统计

使用PFADD 添加数据

微服务Spring Boot 整合 Redis 实现 UV 数据统计

PFCOUNT 计算

  • 得到基数值,文言就叫做去重值(1,1,2,2,3, 3)的刺进pfcount得到的是3
  • 可一次计算多个key
  • 时刻复杂度为O(N),N为key的个数
  • 回来值是一个带有 0.81% 规范错误(standard error)的近似值.

微服务Spring Boot 整合 Redis 实现 UV 数据统计

使用PFCOUNT查询

微服务Spring Boot 整合 Redis 实现 UV 数据统计

PFMERGE 兼并

微服务Spring Boot 整合 Redis 实现 UV 数据统计

兼并key

微服务Spring Boot 整合 Redis 实现 UV 数据统计

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

微服务Spring Boot 整合 Redis 实现 UV 数据统计

中心源码

@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);
}

执行后,如下图

微服务Spring Boot 整合 Redis 实现 UV 数据统计

再次检查内存占比

微服务Spring Boot 整合 Redis 实现 UV 数据统计

能够看出占用大约为14KB,存储上百万数据只占用了14KB数据,可见HyperLogLog的强大!

⛵小结

以上就是【Bug 终结者】对 微服务Spring Boot 整合 Redis 完成 UV 数据计算 的简略介绍,UV数据计算功用是很常用的,在项目中,是一个不错的亮点,计算功用也是各大系统中比较重要的功用,报到完结后,去计算本月的连续 报到记载,来给予奖励,可大大增加用户对系统的活泼度,HyperLogLog能够与BitMap相结合,从而能够能高效的对网站进行深层次的剖析! 技能改动国际!!!

假如这篇【文章】有帮助到你,希望能够给【Bug 终结者】点个赞,创造不易,假如有对【后端技能】、【前端领域】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【Bug 终结者】❤️❤️❤️,我将会给你带来巨大的【收成与惊喜】!