HyperLogLog 的一些案例
394字约1分钟
2024-08-10
网站 UV 统计
/**
* @ClassName HyperLogLogUVDemo
* @Desciption 基于 HyperLogLog 统计网站 UV 案例
* @Author MaRui
* @Date 2021/8/30 17:13
* @Version 1.0
*/
public class HyperLogLogUVDemo {
private static Jedis jedis = new Jedis("127.0.0.1", 6379);
public static void main(String[] args) {
HyperLogLogUVDemo demo = new HyperLogLogUVDemo();
demo.initUVData();
long uv = demo.getUV();
System.out.println("网站 UV 值:" + uv);
}
/**
* 初始化 UV 数据
*/
public void initUVData() {
for (int i = 0; i < 1358; i++) {
jedis.pfadd("hyperloglog_uv_20210830", String.valueOf(i + 1));
}
}
/**
* 获取 UV 值
* @return
*/
public long getUV() {
return jedis.pfcount("hyperloglog_uv_20210830");
}
}
重复内容过滤
/**
* @ClassName GarbageContentFilterDemo
* @Desciption 垃圾内容过滤案例
* @Author MaRui
* @Date 2021/8/30 17:21
* @Version 1.0
*/
public class GarbageContentFilterDemo {
private static Jedis jedis = new Jedis("127.0.0.1", 6379);
public static void main(String[] args) {
GarbageContentFilterDemo demo = new GarbageContentFilterDemo();
String content = "正常的内容";
System.out.println("是否为垃圾内容:" + demo.isGarbageContent(content));
content = "垃圾内容";
System.out.println("是否为垃圾内容:" + demo.isGarbageContent(content));
content = "垃圾内容";
System.out.println("是否为垃圾内容:" + demo.isGarbageContent(content));
}
/**
* 判断当前内容是否是垃圾内容
* @param content
* @return
*/
public boolean isGarbageContent(String content) {
return jedis.pfadd("hyperloglog_content", content) == 0;
}
}
网站 UV 日常统计
/**
* @ClassName WebsiteStatisticsDemo
* @Desciption 网站日常指标统计案例
* @Author MaRui
* @Date 2021/8/30 17:27
* @Version 1.0
*/
public class WebsiteStatisticsDemo {
private static Jedis jedis = new Jedis("127.0.0.1", 6379);
public static void main(String[] args) {
WebsiteStatisticsDemo demo = new WebsiteStatisticsDemo();
demo.initUVData("2021-08-11");
demo.initUVData("2021-08-12");
System.out.println("日活跃:" + demo.getUV("2021-08-11") + "、" + demo.getUV("2021-08-12"));
jedis.pfmerge("two_days", "hyperloglog_uv_2021-08-11", "hyperloglog_uv_2021-08-12");
System.out.println("两日活跃:" + jedis.pfcount("two_days"));
}
/**
* 初始化某一天的 UV 数据
*/
public void initUVData(String date) {
Random random = new Random();
int startIndex = random.nextInt(1000);
System.out.println("今日访问 uv 起始 id 为:" + startIndex);
int size = startIndex + 1358;
for (int i = 0; i < size; i++) {
jedis.pfadd("hyperloglog_uv_" + date, String.valueOf(i + 1));
}
}
/**
* 获取 UV 值
* @param date
* @return
*/
public long getUV(String date) {
return jedis.pfcount("hyperloglog_uv_" + date);
}
}