springboot之redis cache TTL選項(xiàng)的使用
redis cache TTL 選項(xiàng)設(shè)置
- 配置項(xiàng): spring.cache.redis.time-to-live
- 單位: 毫秒
- 其它取值: java.time.Duration 可以識(shí)別的值
- 默認(rèn)值: 緩存不過期
獲取 TTL
@Service public class xxx { ?? ?@Autowired ?? ?private CacheProperties cacheProperties; ?? ?public void xxx() { ?? ??? ?Duration ttl = this.cacheProperties.getRedis().getTimeToLive(); ?? ??? ?if (null == ttl) { ?? ??? ??? ?// 未獲取到ttl,按照默認(rèn)值處理 ?? ??? ?} else { ?? ??? ??? ?// 獲取到ttl ?? ??? ??? ?// ttl.getSeconds() ?? ??? ?} ?? ?} }
SPRINGBOOT redis cache TTL配置多緩存解決
SPRINGBOOT 緩存的 TTL
Spring為了兼容多Cache,注解@Cacheable沒有直接TTL參數(shù)。
- springboot 配置文件可以全局配置TTL
- 可以用@CacheEvict配合@Schedule清理
- 可以自定義RedisCacheManage,指定TTL
配置多個(gè)RedisCacheManage解決方案
可以簡單配置2個(gè)redis cache,一個(gè)指定固定TTL,一個(gè)長期緩存。
不廢話,上代碼。
如果需要和其他系統(tǒng)公用緩存,用Jackson的RedisSerializer,這里直接jdk的序列化。
@Configuration public class CacheConfig { ? ? @Bean ? ? public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { ? ? ? ? RedisTemplate<String, Object> template = new RedisTemplate<>(); ? ? ? ? template.setConnectionFactory(factory); ? ? ? ? template.setKeySerializer(new StringRedisSerializer()); ? ? ? ? template.setHashKeySerializer(new StringRedisSerializer()); ? ? ? ? template.setValueSerializer(new JdkSerializationRedisSerializer()); ? ? ? ? template.setHashValueSerializer(new JdkSerializationRedisSerializer()); ? ? ? ? return template; ? ? } ? ? @Bean(name = "RedisCacheManagerWithTTL") ? ? public RedisCacheManager cacheManagerWithTTL(RedisConnectionFactory factory) { ? ? ? ? RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() ? ? ? ? ? ? ? ? .entryTtl(Duration.ofMinutes(2)) ? ? ? ? ? ? ? ? .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) ? ? ? ? ? ? ? ? .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new JdkSerializationRedisSerializer())) ? ? ? ? ? ? ? ? .disableCachingNullValues(); ? ? ? ? RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(factory); ? ? ? ? return builder.transactionAware().cacheDefaults(config).build(); ? ? } ? ? @Bean ? ? @Primary ? ? public RedisCacheManager cacheManager(RedisConnectionFactory factory) { ? ? ? ? RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() ? ? ? ? ? ? ? ? .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) ? ? ? ? ? ? ? ? .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new JdkSerializationRedisSerializer())) ? ? ? ? ? ? ? ? .disableCachingNullValues(); ? ? ? ? RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(factory); ? ? ? ? return builder.transactionAware().cacheDefaults(config).build(); ? ? } }
使用
如果需要TTL,使用注解
@Cacheable(cacheNames = "YOUR:CACHE:NAME", cacheManager = "RedisCacheManagerWithTTL")
或者類上使用
@CacheConfig(cacheManager = "RedisCacheManagerWithTTL")
需要長期存儲(chǔ)的,使用 默認(rèn)cacheManager即可。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring?controller層引用service報(bào)空指針異常nullpointExceptio問題
這篇文章主要介紹了spring?controller層引用service報(bào)空指針異常nullpointExceptio問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02java 實(shí)現(xiàn)音樂播放器的簡單實(shí)例
這篇文章主要介紹了java 實(shí)現(xiàn)音樂播放器的簡單實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09java selenium使用瀏覽器調(diào)試工具實(shí)現(xiàn)方法
本文主要介紹java selenium使用瀏覽器調(diào)試工具,這里整理了幾種瀏覽器的調(diào)試方法,有需要的小伙伴可以參考下2016-08-08Java創(chuàng)建線程的七種方法總結(jié)(全網(wǎng)最全面)
線程是Java中的基本執(zhí)行單元,它允許程序在同一時(shí)間執(zhí)行多個(gè)任務(wù),下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java創(chuàng)建線程的七種方法,文中通過實(shí)例代碼將這七種方法介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Spring?Boot自動(dòng)配置的原理及@Conditional條件注解
這篇文章主要介紹了Spring?Boot自動(dòng)配置的原理及@Conditional條件注解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2022-07-07使用Java應(yīng)用程序添加或刪除 PDF 中的附件
當(dāng)我們在制作PDF文件或者PPT演示文稿的時(shí)候,為了讓自己的文件更全面詳細(xì),就會(huì)在文件中添加附件,那么如何添加或刪除PDF中的附件呢,今天通過本文給大家詳細(xì)講解,需要的朋友參考下吧2023-01-01淺談java調(diào)用Restful API接口的方式
這篇文章主要介紹了淺談java調(diào)用Restful API接口的方式,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12spring boot使用properties定義短信模板的方法教程
這篇文章主要給大家介紹了關(guān)于spring boot使用properties定義短信模板的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01