Redis实现UV统计的示例代码

 更新时间:2023年01月29日 15:42:38   作者:卒获有所闻  
本文主要介绍了Redis实现UV统计的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、HyperLogLog

1、为什么用HyperLogLog

先介绍两个概念:

UV:全称 Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人、1 天内同一个用户多次访问该网站,只记录 1 次。
PV:全称 Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录一次 PV,用户多次打开页面,则记录多次 PV。往往用来衡量网站的流量。

UV 统计在服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。但是如果每个访问的用户都保存到Redis 中,数据量会非常恐怖。

那么我们要怎么更好的记录呢?就用到 HyperLogLog

2、HyperLogLog是什么

HyperLogLog(HLL)是从 Loglog 算法派生的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。

Redis 中的 HLL 是基于 String 结构实现的,单个 HLL 的内存永远小于 16kb,内存占用低的令人发指!作为代价,其测量结果是概率性的,有小于 0.81% 的误差。不过对于 UV 统计来说,这完全可以忽略。

不管加入多少重复元素,HyperLogLog都只记录一次,天生适合做uv的统计

二、实现UV统计

我们直接用单元测试,向 HyperLogLog 中添加 100 万条数据,看看内存占用和统计效果如何:

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

测试结果:

我们统计出来的数据跟100万非常接近,误差在0.02。而且发现内存只消耗了14kb非常非常低

到此这篇关于Redis实现UV统计的示例代码的文章就介绍到这了,更多相关Redis UV统计内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis高并发问题的解决方法

    Redis高并发问题的解决方法

    这篇文章主要介绍了Redis高并发问题的解决办法,具有很好的参考价值,感兴趣的小伙伴们可以参考一下,具体如下:
    2018-05-05
  • Redis报错“NOAUTH Authentication required”两种解决方案

    Redis报错“NOAUTH Authentication required”两种解决方案

    Redis提供了一个命令行工具redis-cli,它允许你直接连接到Redis服务器,如果你知道Redis服务器的密码,你可以在连接时直接提供它,本文给大家介绍连接了Redis报错“NOAUTH Authentication required”两种解决方案
    2024-05-05
  • redis 亿级数据读取的实现

    redis 亿级数据读取的实现

    本文主要介绍了redis 亿级数据读取的实现,亿级数据规模下实现高效的数据读取成为了许多企业和开发者面临的重大挑战,下面就来介绍一下,感兴趣的可以了解一下
    2024-08-08
  • Redis 脚本和连接命令示例详解

    Redis 脚本和连接命令示例详解

    Redis脚本是一种可以实现复杂任务的脚本语言,可以用来快速履行复杂任务,灵活处理数据管理和管理复杂的利用场景,这篇文章主要介绍了Redis 脚本和连接命令,需要的朋友可以参考下
    2023-09-09
  • 聊聊redis-dump工具安装问题

    聊聊redis-dump工具安装问题

    这篇文章主要介绍了redis-dump工具安装问题,由于安装redis-dump工具需要使用rvm 和gem工具所以要提前安装,详细的安装过程本文给大家提到过,需要的朋友可以参考下
    2022-01-01
  • redis实现延迟任务的项目实践

    redis实现延迟任务的项目实践

    本文主要介绍了redis实现延迟任务的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 基于redis+lua进行限流的方法

    基于redis+lua进行限流的方法

    这篇文章主要介绍了基于redis+lua进行限流,通过实例代码详细介绍了lua+redis进行限流的做法,开发环境使用idea+redis+lua,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Redis高并发防止秒杀超卖实战源码解决方案

    Redis高并发防止秒杀超卖实战源码解决方案

    本文主要介绍了Redis高并发防止秒杀超卖实战源码解决方案,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • linux 常见的标识与Redis数据库详解

    linux 常见的标识与Redis数据库详解

    这篇文章主要介绍了linux 常见的标识与Redis数据库,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Redis分布式锁及4种常见实现方法

    Redis分布式锁及4种常见实现方法

    本文主要介绍了Redis分布式锁及4种常见实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05

最新评论