文章目录

目录

前言

一、缓存概述

二、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里引入依赖

        

springboot 缓存开启 springboot缓存数据_缓存

 

springboot 缓存开启 springboot缓存数据_数据库_02

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中整合缓存机制,可以提高系统的运行效率。