REDIS05_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理

Posted 所得皆惊喜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了REDIS05_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理相关的知识,希望对你有一定的参考价值。

①. 什么是UV、PV、DAU、MAU

  • ①. UV:Unique Visitor,独立访客,一般理解为客户端IP(需要去重考虑)

  • ②. PV:Page View,页面浏览量(不用去重)

  • ③. DAU:日活跃用户量(登录或者使用了某个产品的用户数(去重复登录的用户))

  • ④. MAU:MonthIy Active User,月活跃用户量

②. HyperLogLog的概述

  • ①. 在Redis里面,每个HyperLogLog的键只需要花费12kb内存,就可以计算接近2^64个不同元素的基数

  • ②. 去重复统计功能的基数估计算法-就是HyperLogLog

全集i={1,2,3,4,5,6,7,8,8,9,9,5}
去掉重复的内容
基数={1,2,3,4,5,6,7,8,9}
  • ③. 有误差,非精确统计,牺牲准确率来换取空间,误差仅仅只是0.81%左右

③. HyperLogLog的指令

  • ①. HyperLogLog的基本指令
命令作用
pfadd key element将所有元素添加到key中
pfcount key统计key的估算值(不准确)
pgmerge new_key key1 key2合并key至新key
  • ②. 指令演示

④. 首页UV的Redis统计方案

  • ①. 需求:UV的统计需要去重,一个用户一天内的多次访问只能算作一次

  • ②. 代码展示

@Service
@Slf4j
public class HyperLogLogService {
    @Resource
    private RedisTemplate redisTemplate;

    /**
     * 模拟有用户来点击首页,每个用户就是不同的ip,不重复记录,重复不记录
     */
    @PostConstruct
    public void init() {
        log.info("------模拟后台有用户点击,每个用户ip不同");
        //自己启动线程模拟,实际上产不是线程
        new Thread(() -> {
            String ip = null;
            for (int i = 1; i <=200; i++) {
                Random random = new Random();
                ip = random.nextInt(255)+"."+random.nextInt(255)+"."+random.nextInt(255)+"."+random.nextInt(255);

                Long hll = redisTemplate.opsForHyperLogLog().add("hll", ip);
                log.info("ip={},该ip访问过的次数={}",ip,hll);
                //暂停3秒钟线程
                try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }
            }
        },"t1").start();
    }
}
@RestController
@Slf4j
public class HyperLogLogController {

    @Resource
    private RedisTemplate redisTemplate;

    @ApiOperation("获得ip去重复后的首页访问量,总数统计")
    @RequestMapping(value = "/uv",method = RequestMethod.GET)
    public long uv() {
        //pfcount
        return redisTemplate.opsForHyperLogLog().size("hll");
    }
}

以上是关于REDIS05_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理的主要内容,如果未能解决你的问题,请参考以下文章

REDIS09_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理

REDIS09_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理

REDIS09_HyperLogLog的概述基本命令UVPVDAUMAU首页UV如何进行统计处理

redis入门到精通系列:redis高级数据类型详解(BitMaps,HyperLogLog,GEO)

redis入门到精通系列:redis高级数据类型详解(BitMaps,HyperLogLog,GEO)

Redis学习-09 hyperloglog基本操作