spring boot html缓存,SpringBoot来玩缓存(一)——看效果

前言

​Spring框架支持透明地向应用程序添加缓存对缓存进行管理,其管理缓存的核心是将缓存应用于操作数据的方法,从而减少操作数据的执行次数,同时不会对程序本身造成任何干扰。

Spring Boot继承了 Spring框架的缓存管理功能,通过使用@EnableCaching注解开启基于注解的缓存支持, SpringBoot就可以启动缓存管理的自动化配置。

项目链接:github.com/LambertCOL/…

1. 不使用缓存

1. 环境搭建

1. 数据库

创建名为springbootdata的数据库,运行提供的sql脚本即可生成数据表comment和一些测试数据。00ac05ad948edbf99e5fb453acc4db67.png

2. 创建项目及编写配置信息

使用Spring Initializr创建一个项目,需要勾选的依赖有JPA、Mybatis和Web,而后在application.properties中配置数据库连接信息并开启sql打印到控制台,以便我们观察:372c801e18769afa7a6a4bb5006a56ee.png

a7cf64aac20e1c48bd841b5d50f62d52.png

# MySQL数据库连接配置

spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC

spring.datasource.username=root

spring.datasource.password=123456

#显示使用JPA进行数据库查询的SQL语句

spring.jpa.show-sql=true

复制代码

3. 编写实体

针对comment表编写Comment类与其互为映射关系

@Entity//@Entity标注这个类是个实体类

@Table(name = "comment")//@Table(name="comment")标注将该实体类与数据库中名为comment的表进行映射

public class Comment {

@Id//@Id标注id属性映射数据表comment的主键

@GeneratedValue(strategy = GenerationType.IDENTITY)//因为comment表主键设置了自增,在映射的实体类中标注为主键的属性还需要指定生成策略strategy为自增GenerationType.IDENTITY

private Integer id;

//@Column(name="context")//如果数据表字段与实体属性名不一致,可以通过@Column对其进行映射

private String content;

private String author;

//省略toString和get set方法

}

复制代码

4. 编写功能代码

我比较习惯先从持久层开始写起,先写如何与数据库进行交互,慢慢往调用层写,于是先写个CommentRepository类继承JpaRepository就完事儿了:

/**

*继承 JpaRepository 接口可以无需编写sql来实现简单的数据库操作

*/

public interface CommentRepository extends JpaRepository {}

复制代码

Service层创建AnnoCommentService类来个findCommentById方法,见名思义通过id查询comment:

@Service

public class AnnoCommentService {

@Autowired

private CommentRepository commentRepository;

public Comment findCommentById(Integer id) {

Optional optional = commentRepository.findById(id);

if (optional.isPresent()) {

Comment comment = optional.get();

return comment;

}

return null;

}

}

复制代码

Controller层创建个CommentController类来个同名方法,拦截/anno/findCommentById请求,获取一个Integer参数,调用CommentService对象的findCommentById方法来获得相应的comment显示到浏览器上:

@RestController

public class AnnoCommentController {

@Autowired

private AnnoCommentService annoCommentService;

@RequestMapping("/findCommentById")

public Comment findCommentById(Integer id) {

Comment comment = annoCommentService.findCommentById(id);

return comment;

}

}

复制代码

5. 运行系统分析问题

运行项目,首次发出请求http://localhost:8080/anno/findCommentById?id=1可以看到控制台输出查询SQL93b50ea0396cbeab344b612d9461f98f.png

接着发几次相同的请求,控制台就输出几条执行的SQL35639fbb17277ce921d0d76357bb94bf.png

这说明了每次我们发出请求,后台都要和数据库进行交互获取数据,量变会引起质变,大量的请求会让我们的系统变得很“慢”,原因就在于与数据库的频繁IO。961a4d0c88195ab37885a9a18f0e9110.png

2. 使用Spring默认缓存

Spring框架为我们提供了缓存支持,在项目启动类标注@EnableCaching表示开启缓存支持

@EnableCaching//开启缓存注解

@SpringBootApplication

public class MySpringbootCacheRedisDemoApplication {

public static void main(String[] args) {

SpringApplication.run(MySpringbootCacheRedisDemoApplication.class, args);

}

}

复制代码

然后在需要做缓存的方法上添加@Cacheable注解

@Cacheable(cacheNames = "comment")

public Comment findCommentById(Integer id) {

Optional optional = commentRepository.findById(id);

if (optional.isPresent()) {

Comment comment = optional.get();

return comment;

}

return null;

}

复制代码

cacheNames = "comment"表示会将要缓存的数据存到名为comment的命名空间中,这个后续详述。

验证一下加了缓存后效果O不OK。发出多次相同的请求,控制台输出:

73be299ada6c1ea1122460e7d3baec57.png

可以发现无论发出几次相同的请求,都只会向数据库请求一次数据,这就是缓存的作用。

后续

效果实现了,那么下一篇该来扒一扒底层原理了。

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[SpringBoot来玩缓存(一)——看效果]http://www.zyiz.net/tech/detail-129702.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值