文章目录
目录
前言
一、缓存概述
二、Spring boot默认缓存注解简单介绍
@EnableCaching:通常配置在项目启动类,表示开启缓存功能
@Cacheable:⽤于对方法的查询结果进行缓存存储,当存在缓存时,直接使用缓存结果,不存在缓存时,进行方法查询,将结果存入缓存。
@CachePut:表示将返回结果更新到缓存中。
@CacheEvict:表示删除缓存数据。
@Cacheable,@CachePut,@CacheEvict必须要配置value/cacheNames,表示缓存空间的名称,此外key属性表示缓存在缓存空间中的对应标识符。
三、实操案例——使用缓存注解完成用户信息的增删改查。
1、创建项目,引入依赖
2.配置数据库
3. 依次编写entity,repository,service,controller,并添加相应的缓存注解
总结
前言
缓存是分布式系统中的重要组件,主要解决数据库数据的高并发访问。在实际开发中,尤其是用户访问量较大的网站,用户对高频热点数据的访问非常频繁,为了提高服务器访问性能、减少数据库的压力、提高用户体验,使用缓存显得尤为重要。
提示:以下是本篇文章正文内容,下面案例可供参考
一、缓存概述
- 缓存是计算机已经接收并使⽤过⼀次,然后保存以备将来使⽤的数据。缓存的重点是下次不需要从远程的服务器中再次获取数据,⽽是从⾃⼰的快速缓存中获取数据。
二、Spring boot默认缓存
注解简单介绍
@EnableCaching:通常配置在项目启动类,表示开启缓存功能
@Cacheable:⽤于对方法的查询结果进行缓存存储,当存在缓存时,直接使用缓存结果,不存在缓存时,进行方法查询,将结果存入缓存。
@CachePut:表示将返回结果更新到缓存中。
@CacheEvict:表示删除缓存数据。
@Cacheable,@CachePut,@CacheEvict必须要配置value/cacheNames,表示缓存空间的名称,此外key属性表示缓存在缓存空间中的对应标识符。
三、实操案例——使用缓存注解完成用户信息的增删改查。
1、创建项目,引入依赖
在ider内创建一个项目,创建完毕后在pom.xml里引入依赖
2.配置数据库
在yml文件下配置数据库
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?
serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.show-sql=true
3. 依次编写entity,repository,service,controller,并添加相应的缓存注解
- 建一个entity包,在entity里创建Comment类
@Entity(name = "t_comment")
@Data
public class Comment{
@Id
private Integer id;
private String author;
private String content;
@Column(name = "a_id")
private Integer aId;
}
- 建repository包,在包里创建CommentRepository接口类
public interface CommentRepository extends JpaRepository<Comment, Integer> {
@Query(value = "UPDATE t_comment SET content=?2 where id=?1", nativeQuery = true)
@Modifying
@Transactional
public int updateComment(Integer Id, String content);
}
创建CommentServer类
@Service
public class CommentService{
@Autowired
private CommentRepository commentRepository;
@Cacheable("comment")
public Comment findCommentById(Integer id){
Optional<Comment> comment = commentRepository.findById(id);
if (comment.isPresent()){
return comment.get();
}
returnnull;
}
@CachePut(value = "comment", key = "#id")
public Comment updateComment(Integer id, String content){
Comment comment = findCommentById(id);
comment.setContent(content);
commentRepository.updateComment(id, content);
return comment;
}
@CacheEvict("comment")
public void deleteCommentById(Integer id){
commentRepository.deleteById(id);
}
}
- 创建Commentcontroller类
@RestController
public class CommentController{
@Autowired
private CommentService commentService;
@GetMapping("/comment/{id}")
public Comment findComment(@PathVariable("id") Integer id){
return commentService.findCommentById(id);
}
@GetMapping("/comment/{id}/{content}")
public Comment updateComment(@PathVariable("id") Integer id,
@PathVariable("content") String content){
return commentService.updateComment(id, content);
}
@GetMapping("/comment/delete/{id}")
public void deleteComment(@PathVariable("id") Integer id) {
commentService.deleteCommentById(id);
}
}
- 在主程序ApplicationTest里加⼊注解
@SpringBootApplication
@EnableCaching
publicclassSpringbootChapter06CacheApplication{
publicstaticvoidmain(String[] args){
SpringApplication.run(SpringbootChapter06CacheApplication.class, args);
}
}
测试效果多次访问刷新页⾯http://localhost:8080/comment/1,观察到控制台只在第⼀次打印了sql语句,测试更新/删除等效果。
总结
在SpringBoot项目开发中,与数据库的交流非常密切。通过SpringBoot中整合缓存机制,可以提高系统的运行效率。