【黑马点评Redis——007UV统计】

1. 页面统计量

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

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

2. HyperLogLog用法

HyperLogLog(HLL)是一种概率性数据结构,用于估计一个数据集中的不同元素(基数)。它通过使用固定的内存来实现对大数据集基数的近似计数

2.1. 使用步骤

  1. 初始化HyperLogLog数据结构:首先,您需要为您的数据集初始化一个HyperLogLog数据结构。这涉及到确定所需的内存大小和所需的精度。内存大小将影响所能处理的数据集大小,而精度将决定结果的准确性。
  2. 添加元素:一旦初始化了HLL数据结构,您可以将数据集中的元素逐个添加到HLL中。对于每个元素,HLL会产生一个固定长度的哈希值(16kb),并使用这个哈希值来更新数据结构的内部状态。
  3. 估计基数:一旦所有元素都添加完毕,您可以使用HLL来估计数据集中的不同元素数量。这个估计值可能会有一定的误差,但是随着数据集的增大,误差通常会被控制在一个合理的范围内。
  4. 合并HLL数据结构(可选):如果您有多个HLL数据结构,您可以将它们合并成一个以便计算它们的联合基数。
  5. 查询结果:最后,您可以查询HLL数据结构以获取估计的基数值。

2.2. 常用命令

在这里插入图片描述

3. 代码实验

尝试插入100万数据

    @Test
    void testHyperLogLog(){
        // 准备数组,装用户数据
        String[] users = new String[1000];
        // 数组角标
        int index = 0;
        for (int i = 0; i < 1000000; ) {
            i++;
            // 赋值
            users[index++] = "user_" + i;
            // 每1000条发送一次
            if(i%1000==0){
                index = 0;
                stringRedisTemplate.opsForHyperLogLog().add("hll1", users);
            }
        }
        // 统计数量
        Long size = stringRedisTemplate.opsForHyperLogLog().size("hll1");
        System.out.println("size = " + size);
    }

结果为:997593,数据量基本符合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值