开发者

Redis实现UV统计的示例代码

开发者 https://www.devze.com 2023-01-30 08:59 出处:网络 作者: 卒获有所闻
目录一、HyperlogLog1、为什么用HyperLogLog2、HyperLogLog是什么二、实现UV统计一、HyperLogLog
目录
  • 一、HyperlogLog
    • 1、为什么用HyperLogLog
    • 2、HyperLogLog是什么
  • 二、实现UV统计

    一、HyperLogLog

    1、为什么用HyperLogLog

    先介绍两个概念:

    UV:全称 Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人、1 天内同一个用户多次访问该网站,只记录 1 次。

    PV:全称 Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录一次 PV,用户多次打开页面,则记录多次 PV。往往用来衡量网站的流量。

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

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

    2、HyperLogLog是什么

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

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

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

    Redis实现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);
    }

    测试结果:

    javascript

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

    到此这篇开发者_mssql2008关于Redis实现UV统计的示例代码的文章就介绍到这了,更多相关Redis UV统计内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支编程客栈持我们!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消