SpringCache快速入门

30 阅读1分钟
  • 引入依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
  • 主启动类加注解:@EnableCaching

  • 配置application.propertiesspring.cache.type=REDIS

  • 配置json序列化

    @Configuration
    @EnableCaching
    public class CacheConfig {
        private static final Integer REDIS_TTL = 60;
        @Bean
        public RedisCacheConfiguration redisCacheConfiguration() {
            return RedisCacheConfiguration.defaultCacheConfig()
                    // 1. 设置缓存有效期
                    .entryTtl(Duration.ofSeconds(REDIS_TTL))
                    // 2. 设置 Key 的序列化方式为 String
                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                    // 3. 设置 Value 的序列化方式为 JSON
                    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
                    // 4. 不缓存空值
                    .disableCachingNullValues();
        }
    }
    
  • 方法上添加注解:@Cacheable@CachePut@CacheEvict

    @Service
    public class UserService {
    
        // 1. 先查缓存有就用; 没有执行完方法体,将返回结果进行缓存
        @Cacheable(cacheNames = "user", key = "#id", unless = "#result==null")
        public User getById(Long id) {
            System.out.println("======执行了方法体=======");
            return new User(1, "张三", "shanghai");
        }
    
        // 先执行方法体, 后更新缓存
        @CachePut(cacheNames = "user", key = "#result.id")
        public User updateUser() {
            System.out.println("======执行了方法体=======");
            return new User(1, "张三", "shanghai");
        }
    
        // 3. 执行完方法体后删除缓存
        @CacheEvict(cacheNames = "user", key = "#id")
        public void deleteUser(Long id) {
            System.out.println("======执行了方法体=======");
        }
    
    }