java中文章的阅读数统计

article/2025/9/27 4:29:19

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即可

http://chatgpt.dhexx.cn/article/XHXvxiIH.shtml

相关文章

Java Math3 Descriptive Statistics (描述性统计分析)

文章目录 1、术语2、UnivariateStatistic: 单变量统计分析3、Frequency distributions:频率分布4、Simple regression : 简单回归5、Multiple linear regression:多元线性回归6、Rank transformations :7、Covariance …

字符个数统计(Java实现)

描述 编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次 例如,对于字符串 abaca 而言…

Java绘制统计图

0. 前言 本文采用第三方库xchart进行绘制,所需要使用的jar包如下: https://download.csdn.net/download/hfy1237/86508408 https://download.csdn.net/download/hfy1237/86508849 一、折线图 1. 方式一(快速绘图) package pl…

mysql 中文本类型有哪些_mysql数据类型有哪些

mysql数据类型有:1、数值类型;2、日期和时间类型;3、字符串类型是CHAR、VARCHAR、BINARY【二进制数据类型】、BLOB、TEXT【文本类型】、ENUM【枚举类型】和SET【数据集合】。 mysql数据类型有: MySQL支持的数据类型在几类:数值类型,日期和时间类型和字符串(字符)类型。 数…

mysql polygon 类型_MySQL数据类型 - 空间数据类型 (4)

支持的空间数据格式 有两种标准空间数据格式用于表示查询中的几何对象: ●已知文本(WKT)格式 ●已知二进制(WKB)格式 在内部,MySQL用与WKT或WKB格式不同的格式存储几何值。(内部格式类似于WKB,但有一个4个字节表示SRID。) MySQL提供函数可用于在不同的数据格式之间进行转换。…

MySQL数据类型-整数类型

MySQL提供了多种数据类型,包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型、二进制数据类型; 不同的数据类型有各自的的类型,使用范围也各不相同,而且存储方式也不相同 有两种类型的数字:整数和实…

MySQL 数据类型及占用空间

MySQL 数据类型 元数据 VARCHAR类型字符串及DECIMAL的占用空间实际上包含2部分,一是存储数据本身占用的空间,二是描述数据的元数据占用的空间,例如VARCHAR类型会使用1个字节记录存入数据实际的字符数。 最大行大小限制 MySQL表的内部表示…

Mysql数据类型与选择规则(mysql5.7)

概述 基于mysql5.7。 mysql数据类型大致可以分为四类:数值型、字符串型、日期和时间类型、空间类型。常用的如数值型的tinyint、int、bigint,字符串型的char、varchar、text,日期型的date、datetime、timestemp等,详细见下图: …

Mysql数据类型详解

1、整数类型,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示1字节、2字节、3字节、4字节、8字节整数。 任何整数类型都可以加上UNSIGNED属性,表示数据是无符号的,即非负整数。 长度:整数类型可以被指定长度…

mysql成绩是什么数据类型_mysql数据类型

1、整型 取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。 int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度,不知道这个m有什么用。 2、…

最全MySQL数据类型详解

一、概述 1、MySQL中的数据类型 2、常见数据类型的属性 二、各种数据类型精讲 1、整数类型 1.1 整数类型介绍 整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。它们的区别如下表所示: 1.2…

mysql住址数据类型_MySql数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 数值类型 MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERI…

不全?MySQL数据类型精讲,定点日期枚举文本字符串,json二进制,空间,选择建议,完整详细可收藏

文章目录 1. MySQL中的数据类型2. 整数类型3. 浮点数类型4. 定点数类型5. 位类型:BIT6. 日期与时间类型7. 文本字符串类型8. ENUM类型9. SET类型10. 二进制字符串类型11. JSON 类型12. 空间类型13. 选择建议 1. MySQL中的数据类型 常见数据类型的属性,如…

MySQL的10种常用数据类型

MySQL的数据类型 常用的数据类型有: 整型(xxxint)位类型(bit)浮点型(float和double、real)定点数(decimal,numeric)日期时间类型(date,time,datetime,year)字符串&…

定点数除法

定点数除法 一,手工除法运算方法二,原码除法运算方法三,原码加/减交替除法运算方法(不恢复余数法)四,原码加/减交替除法实现逻辑五,阵列除法 一,手工除法运算方法 图 1 图1 图1 二&…

浮点数与定点数理解、定点数转浮点数相互转换

1、浮点数理解 在平常的代码编写中大家经常用到float 32、double 64等,但是否有深入的去了解一下这类数据是怎么表示的呢?今天我们就去学习浮点数的表示方法,以及其优缺点。 首先浮点数为什么叫浮点数呢?因为浮点数的小数点的位…

定点数的几种表示形式

第二章 数制与编码 2.1 进制之间的转换 掌握:二进制、八进制、十六进制(末位加H表示)、十进制及彼此之间的转换; 问:小数怎么转换? 十进制转二进制:乘以权值再累加,如小数点后第一位的权值是2^(-1) 二进…

计算机中定点数表示方法练习

1【单选题】针对8位二进制数,下列说法中正确的是 。(5.0分) A、-127的补码为10000000 B、-127的反码等于0的移码 C、1的移码等于-127的反码 D、0的补码等于-1的反码 正确答案: B 2【单选题】若某数x的真值为-0.1010,在计算机中该数表示为1.0…

定点数的表示和运算

本文主要介绍以下几方面知识: 定点数的表示(无符号数、有符号数)移位运算(原码、反码、补码)加减运算(原码加减、补码加减)乘法运算(原码乘法、补码乘法)除法运算&#x…

进制以及浮点数和定点数

文章目录 一,进制(1)全国各地最熟悉也最习惯的进制--十进制数1.十进制2.基数3.十进制数的权位展开式4.十进制权位展开式的理解5.十进制对于计算机的局限 (2)计算机所能理解的进制--二进制数1.二进制2.数据存储3.常见信…