买马4887铁算盘资料

从SpringBoot构建十万博文聊聊高并发文章浏览量设

更新时间:2019-08-21

  在经历了,缓存、限流、布隆穿透等等一系列加强功能,十万博客基本算是成型,网站上线以后也加入了百度统计来见证十万+ 的整个过程。

  但是百度统计并不能对每篇博文进行详细的浏览量统计,如果做一些热点博文排行、48小时排行之类统计,还需要引入浏览量统计功能。

  通常情况下,我们只需要每次请求浏览量+1,但是这样真的好吗?或者更直白的讲,真实浏览数准确吗?

  参考了多个社区博客的设计,因为并不十分清楚其后端实现过程,只能从前端得出以下结论。

  慕课网手记:无论是用户登录模式还是用户状态,每次刷新页面浏览数都会 +1。

  51CTO博客:无论是用户登录模式还是用户状态,每次刷新页面浏览数都会 +1。

  简书:用户登录模式下,无论如何刷新浏览数都不会新增,但是游客状态下每次刷新浏览数都会+1。

  博客园:无论是用户登录模式还是用户状态,每次刷新页面浏览数都不变,即使隔天访问,也不变,没细测。

  微信公众号:只能是用户登录状态,每次刷新浏览数基本不变,有时候会出现由多变少的情况,不知道大家有没有发现。

  CSDN博客:无论是用户登录模式还是用户状态,每次刷新页面浏览数都不变,但是隔天访问,浏览数会+1,没细测。

  基于以上社区的数据,直接 Pass 掉前两位,总结了以下几种方案,都是基于缓存标识实现。

  如果游客或者登录用户访问,按照 IP + 文章 ID 维度增加浏览数,那局域网中怎么算?

  如果是游客访问,按照 IP + 浏览器SessionId + 文章 ID 维度增加浏览数,可能解决局域网问题,那么关闭浏览器,重新打开又怎么算?

  如果是登录用户,用户ID + 文章 ID 维度增加浏览数,那么游客在登录后算不算一个浏览数,或者是用户换个 IP 登录算不算 ?

  所以说,怎么算都不准确,浏览数本身就是一个不需要太精确的功能,不要想太多,直接使用 IP + 文章ID 维度即可。

  得到 GET 请求,在限流之后,缓存之前,判断缓存中是否存在 IP+ 文章ID是否存在 Key。

  如果存在,说明之前浏览过,就什么也不做。如果没有,就加上这个 Key,根据业务设置缓存失效时间,然后更新数据库浏览量+1,下面是代码实现:

  这样基本能保证真实的博文浏览量,彩霸王高手论坛,你以为就这么结束了吗?我们做的可是一个高并发的博客,直接落库,显得不是逼格太 Low 了!

  为了进一步提升性能力,来做下一步优化,判断不存在之后,先不急于更新数据库,先在 Redis 里给这篇文章的浏览量+1,Key 为 viewCount:articleId,value 为缓存的浏览量。然后设置一个定时任务,定时更新 Redis 缓存数据到数据库。

  这样,是不是逼格一下子提升了好几个档次!!!下面来介绍一款更有逼格的第三方计数工具。

  一款高并发计数神器 Redis HyperLogLog,她是用来做基数统计的算法,优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

  在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

  为了校验准确性,博主特意测试了一下,分别测试了,20000 和 100000 的数据量,基本上用了 12KB。

  撸完计数功能,作为一个个人博客基本上差不多了已经,前后端框架、连接池、限流、缓存、计数、动静分离,HTTPS安全认证、百度收录等等,后面会追加后台管理,模板、插件等等一系列功能,有兴趣的小伙伴可以一起参与进来啊啊啊啊啊啊......


友情链接:
Copyright 2018-2021 4887铁算盘 版权所有,未经授权,禁止转载。
香港马会开奖结果直播| 白小姐开奖结果| 香港马会开奖资料| www.704711.com| www.hao456789.com| 黄大仙曾道仁特马王118图库| www.lh844.Com| www.612999.com| www.99323a.com| 香港马会资料| 香港挂牌正版图| www.214777.com|