java中文章的阅读数统计
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中文章的阅读数统计相关推荐
- php 获取微信文章阅读量,获取微信公众号的文章的阅读数的实践(请求参数不支持文章 ID)...
1.新的需求为:需要实现微信渠道的文章的阅读数的显示.如图1 图1 2.实则最为理想的情况,应该是能够基于文章 ID 获取此文章的阅读数,就像抖音.查看抖音开放平台文档 – 资源中心 – Open A ...
- java 36 进制_数学-在Java中如何将十进制数转换为以36为底的数字?
数学-在Java中如何将十进制数转换为以36为底的数字? 如果我有一个十进制数字,如何在Java中将其转换为以36为基数? slavoj asked 2020-07-13T23:15:07Z 10个解 ...
- java 微信文章评论点赞_使用fiddler抓取微信公众号文章的阅读数、点赞数、评论数...
1 设置fiddler支持https 打开fiddler,在菜单栏中依次选择 [Tools]->[Options]->[HTTPS],勾上如下图的选项: 单击Actions,选择Expor ...
- 微信公众号所有历史文章的标题/点赞数/阅读数统计
下面这段代码的逻辑起点是页面滑到底部ajax加载的一个链接url_initial(我是在手机微信上在浏览某个公众号的某个页面时send to Chat到自己账号,获得链接后在电脑chrome上打开; ...
- java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?
本问题已经有最佳答案,请猛点这里访问. 我有一个大文件. 它包括大约3.000-20.000行. 如何使用Java获取文件中的行总数? 从你的评论到答案来判断,你要找的词是"有效的" ...
- pmp 成本估算准确高_如何更准确地估算JavaScript中文章的阅读时间
pmp 成本估算准确高 by Pritish Vaidya 通过Pritish Vaidya 准确估算JavaScript中篇文章的阅读时间 (Accurate estimation of read ...
- Java中输入一个十进制数,如何转换为二进制数
方法一:利用Java API直接转换 十进制数如何转换为二进制数,这在Java API 中有一个方法,Integer.toBinaryString( ) 括号里面写上你要转换的十进制数,这样可以直接转 ...
- Java 中文件之魔数
Java 中令人匪夷所思的 Magic 之魔数 先来讲讲一个故事,公司突然有一个需求,客户提交的文件,让你获取到他提交的文件到底是一个什么文件,这个不是小事一桩吗?直接上代码. public stat ...
- Python3 获取CSDN博客文章的阅读数和评论量
阅读量上万以后,就看不到自己博客的精确访问量了.写了一个利用urllib加上正则匹配的Python3脚本来获取阅读数和评论量. [原理] 1. 页面标签内容获取 通过搜索含有 span和对应class ...
最新文章
- linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...
- 解决matplotlib中文乱码问题
- 毫末智行 Fluid 实践:云原生 AI 让汽车变得“更聪明”
- 笔记本多硬盘win7下U盘安装Cnetos7引导问题!
- Docker的容器运行时组件Containerd
- FPGA基础之LUT详解
- 第58课 百钱买百鸡(完整) 3.完善程序 (《小学生C++趣味编程》)
- markdown模板
- 贝塞尔方程与贝塞尔函数学习笔记
- 微信小程序常见面试题及答案
- 从 Google 离职了!
- c# FileHelper 对文件压缩解压,压缩包加密
- 呼叫中心电话系统,你了解多少?
- fatal: http://gitlab.xxxx.com/xxx/songjy-coocaa.git/info/refs not valid: is this a git repository
- CSDN2022总排名前十统计
- 两篇科普文章【开创文章】
- 换一个地方也许国产WPS OFFICE 会重夺办公软件霸主!
- 程序员如何选择有价值的开源方向?
- clamav(clamav杀毒 启动)
- python乒乓球比赛规则介绍_乒乓球比赛规则常识大全