java中文章的阅读数统计

1.直接操作数据库进行增加操作存在问题
存在问题:每次请求都要update数据库,如果访问量大了之后,数据库存在操作压力,此时怎么办?
解决方法:1.提高数据库性能(横向/纵向拓展)2.使用缓存方式减轻数据压力
推荐使用缓存方式:优点:操作快捷,可以减轻数据访问压力缺点:数据可能丢失
-----------------------------------------------------------------------------------
注意:缓存能操作数据必须是非敏感数据(不是很重要的数据)
2.实现缓存的技术
 1.jdk的自带集合(比如:map)最大弊端:数据存在内存中,一旦断电数据丢失2.ehcache 纯的java的进程内缓存框架最大弊端:ehcache缓存面向的是单体结构项目单体:项目1,项目2多体:分布式项目/微服务项目       3.redis /memcache 一套分布式的高速缓存系统redis缓存可以针对单体,也可以针对分布式或微服务项目,并且操作性能非常高---------------------------------------------------------------------------------
确定redis作为缓存技术,接下来思考的点:
该如何操作redis,而redis操作无非是:key怎么设计,value怎么设计
key设计要求:唯一性  可读性  灵活性  时效性

3.步骤
流程实现:1.请求进入到攻略明细接口,获取访问的攻略sid2.通过sid拼接出攻略统计vo对象在redis中key strategy_statis_vo:sid3.判断vo对象的key是否存在4.如果不存在, 需要初始化vo对象进入redis中1>从数据库中查询出攻略的5个条件数据2>将添加数据复制给vo对象3>缓存到redis中5.如果已经存在,或者已经初始化好了,通过key获取vo对象6.统一设置阅读数viewnum属性+17.更新vo对象
4.vo对象
@Getter
@Setter
public class StrategyStatisVO implements Serializable {private String strategyId;  //攻略idprivate int viewnum;  //点击数private int replynum;  //攻略评论数private int favornum; //收藏数private int sharenum; //分享数private int thumbsupnum; //点赞个数
}
5.具体实现
     //设置阅读数@Overridepublic void viewnumIncrease(String sid, int num) {//使用枚举类拼接key,获取vo对象StrategyStatisVO statisVO = this.getStrategyStatisVO(sid);//阅读数统一加一statisVO.setViewnum(statisVO.getViewnum() + num);//更新vothis.setStrategyStatisVO(statisVO);}//获取vo对象@Overridepublic StrategyStatisVO getStrategyStatisVO(String sid) {//使用枚举类拼接keyString key = RedisKeys.STRATEGY_STATIS_VO.join(sid);StrategyStatisVO statisVO = new StrategyStatisVO();//判断vo对象是否存在,即判断key是否存在if (!template.hasKey(key)) {//不存在,初始化数据,将数据查出来,然后赋值给vo对象,最后存起来Strategy strategy = strategyService.get(sid);// BeanUtils工具类BeanUtils.copyProperties(strategy, statisVO);statisVO.setStrategyId(sid);template.opsForValue().set(key, JSON.toJSONString(statisVO));} else {//存在,获取vo对象String VO = template.opsForValue().get(key);statisVO = JSON.parseObject(VO, StrategyStatisVO.class);}return statisVO;}//更新vo对象,将vo对象保存到redis数据库中@Overridepublic void setStrategyStatisVO(StrategyStatisVO statisVO) {String key = RedisKeys.STRATEGY_STATIS_VO.join(statisVO.getStrategyId());template.opsForValue().set(key, JSON.toJSONString(statisVO));}

小结

   1. 数据统计之阅读数统计,我们需要分析出使用vo对象来进行封装2.这样,当还有其他分享数/点赞数/收藏数等其他需要统计的数据时,我们可以只设计一个key和value 3.value存储vo对象,当数据发生变化时,我们只需要通过key键从redis中取出对应的vo对象,然后对vo对象中的属性进行crud操作,最后将更改的vo对象存到redis中即可4.每次刷新页面取出vo对象,然后将其中阅读属性+1即可

java中文章的阅读数统计相关推荐

  1. php 获取微信文章阅读量,获取微信公众号的文章的阅读数的实践(请求参数不支持文章 ID)...

    1.新的需求为:需要实现微信渠道的文章的阅读数的显示.如图1 图1 2.实则最为理想的情况,应该是能够基于文章 ID 获取此文章的阅读数,就像抖音.查看抖音开放平台文档 – 资源中心 – Open A ...

  2. java 36 进制_数学-在Java中如何将十进制数转换为以36为底的数字?

    数学-在Java中如何将十进制数转换为以36为底的数字? 如果我有一个十进制数字,如何在Java中将其转换为以36为基数? slavoj asked 2020-07-13T23:15:07Z 10个解 ...

  3. java 微信文章评论点赞_使用fiddler抓取微信公众号文章的阅读数、点赞数、评论数...

    1 设置fiddler支持https 打开fiddler,在菜单栏中依次选择 [Tools]->[Options]->[HTTPS],勾上如下图的选项: 单击Actions,选择Expor ...

  4. 微信公众号所有历史文章的标题/点赞数/阅读数统计

    下面这段代码的逻辑起点是页面滑到底部ajax加载的一个链接url_initial(我是在手机微信上在浏览某个公众号的某个页面时send to Chat到自己账号,获得链接后在电脑chrome上打开; ...

  5. java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?

    本问题已经有最佳答案,请猛点这里访问. 我有一个大文件. 它包括大约3.000-20.000行. 如何使用Java获取文件中的行总数? 从你的评论到答案来判断,你要找的词是"有效的" ...

  6. pmp 成本估算准确高_如何更准确地估算JavaScript中文章的阅读时间

    pmp 成本估算准确高 by Pritish Vaidya 通过Pritish Vaidya 准确估算JavaScript中篇文章的阅读时间 (Accurate estimation of read ...

  7. Java中输入一个十进制数,如何转换为二进制数

    方法一:利用Java API直接转换 十进制数如何转换为二进制数,这在Java API 中有一个方法,Integer.toBinaryString( ) 括号里面写上你要转换的十进制数,这样可以直接转 ...

  8. Java 中文件之魔数

    Java 中令人匪夷所思的 Magic 之魔数 先来讲讲一个故事,公司突然有一个需求,客户提交的文件,让你获取到他提交的文件到底是一个什么文件,这个不是小事一桩吗?直接上代码. public stat ...

  9. Python3 获取CSDN博客文章的阅读数和评论量

    阅读量上万以后,就看不到自己博客的精确访问量了.写了一个利用urllib加上正则匹配的Python3脚本来获取阅读数和评论量. [原理] 1. 页面标签内容获取 通过搜索含有 span和对应class ...

最新文章

  1. linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...
  2. 解决matplotlib中文乱码问题
  3. 毫末智行 Fluid 实践:云原生 AI 让汽车变得“更聪明”
  4. 笔记本多硬盘win7下U盘安装Cnetos7引导问题!
  5. Docker的容器运行时组件Containerd
  6. FPGA基础之LUT详解
  7. 第58课 百钱买百鸡(完整) 3.完善程序 (《小学生C++趣味编程》)
  8. markdown模板
  9. 贝塞尔方程与贝塞尔函数学习笔记
  10. 微信小程序常见面试题及答案
  11. 从 Google 离职了!
  12. c# FileHelper 对文件压缩解压,压缩包加密
  13. 呼叫中心电话系统,你了解多少?
  14. fatal: http://gitlab.xxxx.com/xxx/songjy-coocaa.git/info/refs not valid: is this a git repository
  15. CSDN2022总排名前十统计
  16. 两篇科普文章【开创文章】
  17. 换一个地方也许国产WPS OFFICE 会重夺办公软件霸主!
  18. 程序员如何选择有价值的开源方向?
  19. clamav(clamav杀毒 启动)
  20. python乒乓球比赛规则介绍_乒乓球比赛规则常识大全

热门文章

  1. java httpClient Digest Auth 认证
  2. python asyncio 异步 I/O - 实现并发http请求(asyncio + aiohttp)
  3. 码农不识贝叶斯,虽知数据也枉然
  4. k8s pod 在节点间调度控制
  5. 10款PHP开源的外贸网店电子商务管理系统
  6. spring boot基于redis的分布式定时任务
  7. go web ssh推荐使用
  8. 不同封装的0Ω电阻,到底可以过多大电流?
  9. Java实例15 - 求最大公约数 gcd 辗转相除 欧几里德算法
  10. 远程桌面管理工具RDO下载地址