UV(Unique Visitor)
- 独立访客,需通过用户IP排重统计数据
- 每次访问都要进行统计
- HyperLogLog,性能好,且存储空间小 DAU(Dail Active User)
- 日活跃用户,需通过用户ID排重统计数据
- 访问过一次,则认为其活跃(自定义)
- Bitmap,性能好,且可以统计精准的结果
1、RedisKey
2、Service
由于使用Redis存储数据,所以不需要访问DAO层,直接在Service层处理数据即可。 DataService.java
UV
1、将指定IP计入UV 通过new SimpleDateFormat(“yyyyMMdd”) 先指定日期格式
2、统计:统计指定日期范围 1)传入的日期参数,是Data类 2)由于要统计日期范围内的数据,所以要生成一组Rediskey:List< String> keyList,其中用到了Calendar类对日期进行循环 3)合并数据 4)调用 redisTemplate.opsForHyperLogLog().size() 获得统计结果
DAU
1、根据 userId 将指定用户计入DAU
2、统计指定日期范围内的DAU 与calculateUV() 方法类似,不同的是要对 区间范围内的数据进行OR操作,且connection.bitOp()要求传入RedisKey的Byte数组
3、Controller
@DateTimeFormat(pattern = “yyyy-MM-dd”) :Date start,是对日期参数的处理。 return “forward:/data”:forward请求转发。声明该方法只能处理一半,还需要另外一个方法接着处理,请求转发到了 “/data” 路径,由于还是同一个请求,所以"/data"路径也要支持 RequestMethod.POST 请求。
4、拦截器
每次请求都要记录一下数据,所以这里使用的是拦截器
配置 DataInterceptor,拦截除静态资源之外的所有请求 WebMvcConfig.java