Spring | Spring Cache 缓存框架

Spring Cache 缓存框架:

    • Spring Cache功能介绍
    • Spring Cache的Maven依赖
    • Spring Cache的常用注解
      • @EnableCaching注解
      • @CachePut注解
      • @Cacheable注解
      • @CacheEvict注解

Spring Cache功能介绍

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

  • Spring Cache提供了一层抽象底层可以切换不同的缓存实现。比较常见的(底层)缓存实现有:

    Redis、EHCache、Caffeine。可自定义地修改Spring Cache底层的缓存实现比如: 你想用Redis进行缓存,可修改Spring Cache配置,让其底层通过Redis来实现缓存功能。

  • 在具体的项目中,想切换Spring Cache底层的“缓存实现”时
    只需修改该 “缓存实现”的依赖Spring Cache底层就会自动切换“缓存实现”
    例如:此时的底层的缓存实现为: EHCache,想修改为Redis,只需把Redis依赖修改为EHCache的依赖即可。 (当然你的电脑得提前装好Redis、配置好Redis)

Spring Cache的Maven依赖

       
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redisartifactId>
        dependency>

  
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-cacheartifactId>
        dependency>

Spring Cache的常用注解

@EnableCaching注解

  • 通常加在类 (启动类 )上,用于==开启缓存注解功能==。

Spring | Spring Cache 缓存框架_第1张图片

  • @Slf4j
    @SpringBootApplication
    @EnableCaching  //开启缓存注解功能
    public class CacheDemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(CacheDemoApplication.class,args);
            log.info("项目启动成功...");
        }
    }
    

@CachePut注解

  • 一般加在方法上,将方法的返回值放到缓存中。
    只能“放”缓存数据

  •   @PostMapping
        /*
         * 当数据插入到数据库的同时,还需要把这个数据保存到Redis中一份(进行数据的缓存),
         * 此时可用Spring Cache框架的 @CachePut注解 :将方法的返回值存入到缓存中。
         */
        //使用Spring Cache缓存数据
        /* 如果此时User的id为1,那么存入Redis中的“key名称”为: userCache::1 */
        @CachePut(cacheNames = "userCache",key = "#user.id")
        public User save(@RequestBody User user){
            userMapper.insert(user);
            return user;
        }
    

    @CachePut注解的多种实现方式:

Spring | Spring Cache 缓存框架_第2张图片

  •   @PostMapping
        /*
         * 当数据插入到数据库的同时,还需要把这个数据保存到Redis中一份(进行数据的缓存),
         * 此时可用Spring Cache框架的 @CachePut注解 :将方法的返回值存入到缓存中。
         */
        //使用Spring Cache缓存数据
        /* 如果此时User的id为1,那么存入Redis中的“key名称”为: userCache::1 */
        @CachePut(cacheNames = "userCache",key = "#user.id")
    
        /* #result得到是一个User对象,结合该对象的id,生成存入Redis数据库中的 key */
         @CachePut(cacheNames = "userCache",key = "#result.id") //存入Redis的key名为: userCache::1 --对象导航
    
        /* #p0 : 获得save()方法的第一个参数,即User对象 */
        @CachePut(cacheNames = "userCache",key = "#p0.id") //存入Redis的key名为: userCache::1
    
        /* #a0 : 获得方法的第一个参数,... */
        @CachePut(cacheNames = "userCache",key = "#a0.id") //存入Redis的key名为: userCache::1
    
        /* #root.args[1] : 获得第一个参数 */
        @CachePut(cacheNames = "userCache",key = "#root.args[1].id") //存入Redis的key名为: userCache::1
        //上面的@CachePut()注解选其中一个使用即可。
        public User save(@RequestBody User user){
            userMapper.insert(user);
            return user;
        }
    

@Cacheable注解

  • 一般加在方法上在方法执行前,先查询缓存中是否有数据如果有数据,则直接返回缓存数据如果没有缓存数据,调用方法并将方法返回值放到缓存中
    即“可”取缓存数据,也可“放”缓存数据

Spring | Spring Cache 缓存框架_第3张图片

  •  @GetMapping
         /*
          在方法执行前,先查询缓存中是否有数据,如果有数据,则直接返回缓存数据。
          如果没有缓存数据,调用方法并将方法返回值放到缓存中。
         */
        @Cacheable(cacheNames = "userCache",key = "#id") // key的生成 : userCache::10
        public User getById(Long id){ //如果该id的值为: 10
            User user = userMapper.getById(id);
            return user;
      }
    

@CacheEvict注解

  • 一般加在方法上,有一条多条缓存数据从缓存中删除

Spring | Spring Cache 缓存框架_第4张图片

  •    /*
          数据库中的数据被删掉了,对应的也需要给清理掉 (清除一条缓存数据)
         */
        @CacheEvict(cacheNames="userCache",key ="#id") //清理一条或多条缓存数据
        @DeleteMapping
        public void deleteById(Long id){
            userMapper.deleteById(id);
        }
    
        /*
         数据库中的数据被删掉了,对应的也需要给清理掉 (清除多条缓存数据)
        */
    @CacheEvict(cacheNames = "userCache",allEntries = true) //清理一条或多条缓存数据
    	@DeleteMapping("/delAll")
        public void deleteAll(){
            userMapper.deleteAll();
     }
    

你可能感兴趣的:(框架知识点-合集,1024程序员节,Java,Spring,spring,boot,Spring,Cache,Redis,缓存数据)