1、HyperLogLog数据类型介绍
HyperLogLog是redis 的一种特殊数据类型,是基数统计的算法!
A{1 3 5 7 8 7} B{1 3 5 7 8 }
基数(不重复的元素)=5 ,可接受误差!
优点:占用内存是固定的,2^64不同元素的技术,只需要费12KB内存!如果从内存角度来比较的话 HyperLogLog首选!
2、业务:统计每个商品的用户访问量
public Long statisticsPvNum(Long userId,Long id) {
//存入key
redisTep.opsForHyperLogLog().add("pv_num" + id, userId + "-" + id);
//统计访问量
Long num = redisTep.opsForHyperLogLog().size("pv_num" + id);
return num;
}
redis 事务
public Long statisticsPvNum(Long userId,Long id) {
redisTep.setEnableTransactionSupport(true);//开启事务支持
Long num;
redisTep.multi();//开启事务
try {
redisTep.opsForValue().set("111","111");
redisTep.opsForValue().set("222","222");
redisTep.opsForValue().set("222","222");
redisTep.exec();//执行事务 (把前面2条语句放进队列)在这里执行
return num;
} catch (Exception e) {
redisTep.discard();//放弃事务
System.out.println(e);
} finally {
RedisConnectionUtils.unbindConnection(redisTep.getConnectionFactory());//关闭连接
}
return null;
}
3、PFADD、PFCOUNT 操作
PFADD命令在同一个key中只会添加不同的value进去,相同的数据则不会被添加进去。
PFCOUNT命令在同一个key中只会只会计算不同的value元素数量。
4、总结
为了节约内存,存入的用户id+商品id并不会展示出来,不管存入多少数据,都是一个HYLL,它只会对存入的数据进行统计;