當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
缓存-SpringCache-自定义缓存配置
生活随笔
收集整理的這篇文章主要介紹了
缓存-SpringCache-自定义缓存配置
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
redis 默認使用 jdk 序列化,需要我們配置序列化機制,自定義一個配置類,否則存入的數據顯示亂碼
@EnableCaching //開啟緩存 @Configuration public class MyCacheConfig {@Beanpublic RedisCacheConfiguration redisCacheConfiguration(){RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();//指定鍵和值的序列化機制config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));return config;} }使用以上配置后,雖然亂碼的問題解決了,但配置文件又不生效了,比如過期時間等,這是因為在初始化時會判斷用戶是否自定義了配置文件,如果自定義了,原來的就不會生效,源碼如下:
private org.springframework.data.redis.cache.RedisCacheConfigurationdetermineConfiguration(ClassLoader classLoader) {//如果配置了,就返回自定義的配置if (this.redisCacheConfiguration != null) {return this.redisCacheConfiguration;}//沒配置使用默認的配置Redis redisProperties = this.cacheProperties.getRedis();org.springframework.data.redis.cache.RedisCacheConfiguration config = org.springframework.data.redis.cache.RedisCacheConfiguration.defaultCacheConfig();config = config.serializeValuesWith(SerializationPair.fromSerializer(new JdkSerializationRedisSerializer(classLoader)));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; }所以,我們也需要手動獲取 ttl、prefix 等屬性,直接仿照源碼就行,將配置類修改為如下:
@EnableCaching //開啟緩存 @Configuration @EnableConfigurationProperties(CacheProperties.class) //緩存的所有配置屬性都在這個類里 public class MyCacheConfig {@Beanpublic RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {//獲取默認配置RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();//指定鍵和值的序列化機制config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));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;} }?
總結
以上是生活随笔為你收集整理的缓存-SpringCache-自定义缓存配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 缓存-分布式锁-缓存一致性解决
- 下一篇: 缓存-SpringCache-原理与不足