1. Redis的HyperLogLog的统计功能
示例:
表明HyperLogLog不管加入重复元素多少次都不会让count++,不会计数重复元素,所以适合做UV计数
2. 简单实现UV测试
通过单元测试,向 HyperLogLog 中添加 100 万条数据,看看内存占用和统计效果如何
/**
* UV统计测试
*/
@Test
void testHyperLogLog() {
String[] values = new String[1000];
int j = 0;
//分批·每次一千导入到Redis中
for (int i = 0; i < 1000000; i++) {
j = i % 1000;
values[j] = "user_" + i;
if(j == 999) {
// 发送到Redis中
stringRedisTemplate.opsForHyperLogLog().add("hl1", values);
}
}
// 统计数量
Long count = stringRedisTemplate.opsForHyperLogLog().size("hl1");
System.out.println("count = " + count);
}
插入了一百万条,最后得到的是997573条,符合概率预期
再次查看内存消耗