深圳市南山区住房和建设局网站官网,百度快速优化排名软件,蓝牙耳机网络营销推广方案,徐州铜山区建设局网站#x1f468;#x1f393;作者简介#xff1a;一位大四、研0学生#xff0c;正在努力准备大四暑假的实习 #x1f30c;上期文章#xff1a;Redis#xff1a;原理速成项目实战——Redis实战14#xff08;BitMap实现用户签到功能#xff09; #x1f4da;订阅专栏作者简介一位大四、研0学生正在努力准备大四暑假的实习 上期文章Redis原理速成项目实战——Redis实战14BitMap实现用户签到功能 订阅专栏Redis原理速成项目实战 希望文章对你们有所帮助 这篇是实战部分的终结篇其实Redis的核心操作主要是在实战部分的秒杀业务的这里面有很多的细节缓存、分布式锁、异步线程实现秒杀这里面有很多的细节可以去看这几篇文章 Redis原理速成项目实战——Redis实战7优惠券秒杀细节解决超卖、一人一单问题 Redis原理速成项目实战——Redis实战8基于Redis的分布式锁及优化 Redis原理速成项目实战——Redis实战9秒杀优化 Redis原理速成项目实战——Redis实战10Redis消息队列实现异步秒杀 本文只是对这个项目再拓展一个基于Redis的功能。
目前为止虽然项目功能上比较完善了但是用到的Redis基本都是单结点的多结点的我只是简单演示过demo。 这篇结束后要单独开一个专栏了实现Redis的高级操作Redis持久化、Redis主从模式、Redis哨兵机制以及Redis的分片集群 除此之外还会进行Redis原理的更深入的剖析将会自己做一点总结为了将来的面试。 但是想冲好实习的话除了Redis高级部分以及其底层原理还非常需要快点将技术栈叠高一点因此后面的总结可能进度会很慢了。 Redis企业级项目实战终结篇HyperLogLog实现UV统计 HyperLogLog的用法测试百万数据的统计 HyperLogLog的用法
先搞懂两个概念 1、UV全称Unique Visitor也叫独立访客量是指通过互联网访问、浏览这个网页的自然人。1天内同一个用户多次访问该网站只记录1次。 2、PV全称Page View也叫页面访问量或点击量用户每访问网站的一个页面记录1次PV用户多次打开页面则记录多次PV。往往用来衡量网站的流量。
UV统计在服务端做会比较麻烦因为要判断该用户是否已经统计过了需要将统计过的用户信息保存。但是如果每个访问的用户都保存到Redis中数据量会非常恐怖。
HyperLogLog是LogLog算法派生的概率算法用于确定非常大的集合的基数而不需要存储器所有值具体的原理涉及了很多数学大家可以自行去了解。
Redis中的HLL是基于String结构实现的单个HLL的内存永远小于16kb内存占用非常低其代价就是测量结果是存在概率性的有0.8%的误差这个误差其实也是很小了。如果能忍受这个误差就可以去用。 不管用PFADD添加多少个重复元素用PFCOUNT都不会重复计数天生就适合用来做UV统计。
测试百万数据的统计
百万用户访问的数据这可并不好搞所以直接用单元测试向HyperLogLog中添加100万条数据查看内存占用以及统计的效果。 首先利用命令查看当前内存使用情况 测试类如下 Testvoid testHyperLogLog(){String[] values new String[1000];int j 0;for(int i 0; i 1000000 ; i){j i % 1000;values[j] user_ i;if(j 999){//发送到RedisstringRedisTemplate.opsForHyperLogLog().add(hl2, values);}}//统计数量Long count stringRedisTemplate.opsForHyperLogLog().size(hl2);System.out.println(count count);}准确率还是很高的。
内存占用情况 可以发现这并没有牺牲太多的内存。
这种准确率已经非常的好了以后要做UV统计直接把数据往里面塞就可以了真的遇到很多的用户要这么去存储用户的时候也是很容易做出来的。
到这里Redis的所有实战都已经完成了目前为止我已经算是完成了一个比较企业级的项目了虽然这个功能只是做了个功能测试。