• 快速入门:Spring Cache


    目录

    一:Spring Cache简介

    二:Spring Cache常用注解

    2.1:@EnableCaching

    2.2: @Cacheable

    2.3:@CachePut 

    2.4:@CacheEvict 

     三:Spring Cache案例

    3.1:先在pom.xml中引入两个依赖

    3.2:案例

    3.2.1:构建数据库表

    3.2.2:构建User类 

    3.2.3:构建Controller  mapper层代码

    3.2.4:在启动类上添加注解@EnableCaching

    3.2.5:使用剩余部分注解


    一:Spring Cache简介

    Spring Cache是一个框架,实现了基于注解的缓存功能,只需要一个简单的注解,就能实现缓存功能。

    Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,例如: EHche Caffeine Redis.对应的不同缓存有不同的依赖。

    二:Spring Cache常用注解

    2.1:@EnableCaching

    开启缓存注解功能,通常用在启动类上。

    2.2: @Cacheable

    在某个方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据value的值;如果没有缓存数据,调用方法并将返回值放到缓存中。

    2.3:@CachePut 

    将方法的返回值放到缓存中。

    2.4:@CacheEvict 

    将一条或多条数据从缓存中删除

     三:Spring Cache案例

    3.1:先在pom.xml中引入两个依赖

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-cacheartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-data-redisartifactId>
    8. dependency>

    3.2:案例

    3.2.1:构建数据库表

    1. create database spring_cache_demo;
    2. use spring_cache_demo;
    3. CREATE TABLE `user` (
    4. `id` bigint NOT NULL AUTO_INCREMENT,
    5. `name` varchar(45) DEFAULT NULL,
    6. `age` int DEFAULT NULL,
    7. PRIMARY KEY (`id`)
    8. );

    3.2.2:构建User类 

    1. @Data
    2. public class User implements Serializable {
    3. private static final long serialVersionUID = 1L;
    4. private Long id;
    5. private String name;
    6. private int age;
    7. }

    3.2.3:构建Controller  mapper层代码

    由于当前业务逻辑比较简单,所以我们不需要service层的代码

    1. //Controller层
    2. @RestController
    3. @RequestMapping("/user")
    4. @Slf4j
    5. public class UserController {
    6. @Autowired
    7. private UserMapper userMapper;
    8. @PostMapping
    9. public User save(@RequestBody User user){
    10. userMapper.insert(user);
    11. return user;
    12. }
    13. @DeleteMapping
    14. public void deleteById(Long id){
    15. userMapper.deleteById(id);
    16. }
    17. @DeleteMapping("/delAll")
    18. public void deleteAll(){
    19. userMapper.deleteAll();
    20. }
    21. @GetMapping
    22. public User getById(Long id){
    23. User user = userMapper.getById(id);
    24. return user;
    25. }
    26. }
    27. //mapper层代码
    28. @Mapper
    29. public interface UserMapper{
    30. @Insert("insert into user(name,age) values (#{name},#{age})")
    31. @Options(useGeneratedKeys = true,keyProperty = "id")
    32. void insert(User user);
    33. @Delete("delete from user where id = #{id}")
    34. void deleteById(Long id);
    35. @Delete("delete from user")
    36. void deleteAll();
    37. @Select("select * from user where id = #{id}")
    38. User getById(Long id);
    39. }

    3.2.4:在启动类上添加注解@EnableCaching

    1. @Slf4j
    2. @EnableCaching//代表开启注解
    3. @SpringBootApplication
    4. public class CacheDemoApplication {
    5. public static void main(String[] args) {
    6. SpringApplication.run(CacheDemoApplication.class,args);
    7. log.info("项目启动成功...");
    8. }
    9. }

    3.2.5:使用剩余部分注解

    当是插入操作时,我们考虑用哪个注解?

    我们考虑使用的是@CachePut这个注解(原因:这个注解是将方法的返回值存储到缓存当中)。

    1. @Autowired
    2. private UserMapper userMapper;
    3. @CachePut(cacheNames = "userCache",key ="#user.id")
    4. //如果使用springCache缓存数据,key的生成:userCache:
    5. @PostMapping
    6. public User save(@RequestBody User user){
    7. userMapper.insert(user);
    8. return user;
    9. }

    同时在mapper接口中,要加入user的id返回的注解,代码如下:

    1. @Insert("insert into user(name,age) values (#{name},#{age})")
    2. @Options(useGeneratedKeys = true,keyProperty = "id")
    3. void insert(User user);

     接口文档中进行测试:

    Redis中进行查看:


     当根据用户的id查询用户时,我们该使用哪个注解?

     我们使用@Cacheable注解(在方法执行前,判断有没有缓存数据,如果有,直接进行返回,如果没有,则调用方法并将数据放到缓存当中)。

    1. @GetMapping
    2. @Cacheable(cacheNames = "userCache", key="#id")
    3. //key的生成:userCache:id value:为查询相应的数据,若是查询到,直接进行返回,如果查询不到,则将其加入到缓存
    4. public User getById(Long id){
    5. User user = userMapper.getById(id);
    6. return user;
    7. }

    当删除一条或者多条数据时,使用哪个注解?

    这个比较简单,我们使用@CacheEvit注解(这个注解可以删除一条或者多条数据)。 

    1. @DeleteMapping
    2. @CacheEvict(cacheNames = "userCache",key="#id")
    3. public void deleteById(Long id){
    4. userMapper.deleteById(id);
    5. }
    6. @DeleteMapping("/delAll")
    7. @CacheEvict(cacheNames = "userCache",allEntries=true)
    8. public void deleteAll(){
    9. userMapper.deleteAll();
    10. }
  • 相关阅读:
    RabbitMQ消息的可靠传输和防止消息丢失
    【1++的Linux】之线程(二)
    logstash 编码转换
    USV合伙人反思FTX:应以更长远的眼光看待Web3
    微信公众号网页授权登录获取用户基本信息
    java基于SpringBoot+vue的垃圾分类网站系统 elementui 前后端分离
    C现代方法(第14章)笔记——预处理器
    基于Qt C++的工具箱项目源码,含命令行工具、桌面宠物、文献翻译、文件处理工具、医学图像浏览器、插件市场、设置扩展等工具
    vue快速入门(四十四)自定义组件
    armv8 smpen设置
  • 原文地址:https://blog.csdn.net/weixin_65492194/article/details/133931365