1、引入依赖
org.springframework.boot spring-boot-starter-cache
2、配置
spring: cache: type: redis redis: time-to-live: 60000 key-prefix: CACHE_ use-key-prefix: true cache-null-values: true # 是否缓存空值
3、配置序列化
@EnableConfigurationProperties(CacheProperties.class) @EnableCaching // 开启缓存 @Configuration public class MyCacheConfig { @Bean RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) { RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())); config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer( new GenericJackson2JsonRedisSerializer())); // 以下代码保证在 application.yml 里设置的配置生效 CacheProperties.Redis redisProperties = cacheProperties.getRedis(); if (redisProperties.getTimeToLive() != null) { config = config.entryTtl(redisProperties.getTimeToLive()); } if (redisProperties.getKeyPrefix() != null) { config = config.prefixKeysWith(redisProperties.getKeyPrefix()); } if (redisProperties.isCacheNullValues()) { config = config.disableCachingNullValues(); } if (redisProperties.isUseKeyPrefix()) { config = config.disableKeyPrefix(); } return config; } }
4、使用
// 代表当前方法的结果需要缓存 @Cacheable(value = {"category"}, key = "'level1Categorys'") @Cacheable(value = {"category"}, key = "#root.method.name") // key 命令为方法名 @Cacheable(value = {"category"}, key = "'getLevel1Categorys'", sync = true) // sync 通过 synchronized 加锁解决缓存击穿问题 // 使缓存失效 @CacheEvict(value = "category", key = "'getLevel1Categorys'") // 多个操作 @Caching(evict = { @CacheEvict(value = "category", key = "'getLevel1Categorys'"), @CacheEvict(value = "category", key = "'getCatalogJson'") }) // 删除整个分区 @CacheEvict(value = "category", allEntries = true) // 双写模式 @CachePut
还没有评论,来说两句吧...