在这里插入图片描述

redis-如何统计海量UV统计


UV统计

UV统计是很多电商常见的一个需求,与PV不同的是,PV是统计应用的点击量或者浏览量,UV是单个页面单个用户去重之后的访问次数。如果用redis实现该功能,PV完全可以用计数器实现,UV可能大家会想到用redis的set不断去添加,但是如果你的网站并发量非常大,你将维护以后巨大的set。这时候就要介绍一个redis专门用于该类型场景的数据结构HyperLogLog了


一、HyperLogLog基础指令

pfadd
pfcount

127.0.0.1:6379> pfadd uvtest user1
(integer) 1
127.0.0.1:6379> pfadd uvtest user2
(integer) 1
127.0.0.1:6379> pfadd uvtest user3
(integer) 1
127.0.0.1:6379> pfcount uvtest
(integer) 4

二、jedis实现

public class testMain {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        for (int i = 0; i < 1000000; i++) {
            jedis.pfadd("uvtestcount", "user" + i);
        }
        System.out.println(jedis.pfcount("uvtestcount"));
        jedis.close();
    }
}

在这里插入图片描述
这里发现最后HyperLogLog出来的数据量并不是100W,可以发现HyperLogLog这个数据结构是存在微小差异的。本身UV统计的需求也是统计一个大概的量,不需要非常精确。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐