-
引入依赖
<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.properties:spring.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("======执行了方法体======="); } }