③. JSON格式转换、空值缓存
- ①. 上面的配置中,可以指定名称、并且过期时间已经配置了,关于JSON格式还没有解决
- ②. SpringCache的配置原理
* CacheAutoConfiguration导入了RedisCacheConfiguration,RedisCacheConfiguration自动配置了缓存管理器RedisCacheManager * RedisCacheManager->初始化所有的缓存->每个缓存决定使用什么配置->按照配置文件中配置的名字进行初始化,决定用哪种配置(redisCacheConfiguration) * ->如果redisCacheConfiguration有就用自己有的,没有就用默认配置 * ->想改配置,只需要给容器放一个RedisCacheConfiguration * ->就会应用到当前RedisCacheManager管理的所有缓存中(缓存分区)
③. 新建配置类,进行JSON格式转换
//application.properties spring.cache.type=redis #spring.cache.cache-names= #设置存活时间,ms为单位 spring.cache.redis.time-to-live=3600000 #如果指定了前缀,就使用我们指定的前缀,如果没有就默认使用缓存的名字作为前缀 #CACHE_getLevel1Category spring.cache.redis.key-prefix=CACHE_ #默认是使用前缀的 #如果开始了这个,那么缓存的key=getLevel1Category,没有CACHE spring.cache.redis.use-key-prefix=false #是否缓存空值,防止缓存穿透 spring.cache.redis.cache-null-values=true
@EnableConfigurationProperties(CacheProperties.class) @EnableCaching @Configuration public class MyCacheConfig { /** * 要让配置文件中的配置生效,需要加上@EnableConfigurationProperties(CacheProperties.class) * @param cacheProperties * @return */ @Bean RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties){ RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())); //值变成JSON格式 config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); 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; } }