仅是个人对HyperLogLog的功能测试的记录,没有相关知识点,请见谅
public class TestDemo {
@Resource
private StringRedisTemplate stringRedisTemplate;
//测试百万数据的统计
@Test
public void testHyperLog(){
String[] values = new String[1000];
int j = 0;
for (int i = 0; i < 1000000; i++) {
j = i % 1000;
//在循环过程中把数据插入到数组中,但由于i不断增加可能会超过所创建的字符串数组大小,所以i%1000用变量j接收,
// 这样无论i增加到多少,j的取值范围只能是0到999,这样就不会超过范围
values[i] = "user_" + i;
//等字符数组满了就发送,所以再判断一下数组是否满了
if (j == 999 ){
//每到1000条就发送一次到Redis
stringRedisTemplate.opsForHyperLogLog().add("hl2",values);
}
}
//统计数量
Long count = stringRedisTemplate.opsForHyperLogLog().size("hl2");
System.out.println("count = " + count); //997593 虽然丢失了部分数据但是也不错了,单个HLL的内存永远小于16KB,内存占用极低,可作为代价所以会有小于0.81%的误差
}
}