springboot之redis cache TTL選項的使用
redis cache TTL 選項設置
- 配置項: spring.cache.redis.time-to-live
- 單位: 毫秒
- 其它取值: java.time.Duration 可以識別的值
- 默認值: 緩存不過期
獲取 TTL
@Service
public class xxx {
?? ?@Autowired
?? ?private CacheProperties cacheProperties;
?? ?public void xxx() {
?? ??? ?Duration ttl = this.cacheProperties.getRedis().getTimeToLive();
?? ??? ?if (null == ttl) {
?? ??? ??? ?// 未獲取到ttl,按照默認值處理
?? ??? ?} else {
?? ??? ??? ?// 獲取到ttl
?? ??? ??? ?// ttl.getSeconds()
?? ??? ?}
?? ?}
}SPRINGBOOT redis cache TTL配置多緩存解決
SPRINGBOOT 緩存的 TTL
Spring為了兼容多Cache,注解@Cacheable沒有直接TTL參數(shù)。
- springboot 配置文件可以全局配置TTL
- 可以用@CacheEvict配合@Schedule清理
- 可以自定義RedisCacheManage,指定TTL
配置多個RedisCacheManage解決方案
可以簡單配置2個redis cache,一個指定固定TTL,一個長期緩存。
不廢話,上代碼。
如果需要和其他系統(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")
需要長期存儲的,使用 默認cacheManager即可。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
spring?controller層引用service報空指針異常nullpointExceptio問題
這篇文章主要介紹了spring?controller層引用service報空指針異常nullpointExceptio問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
java selenium使用瀏覽器調試工具實現(xiàn)方法
本文主要介紹java selenium使用瀏覽器調試工具,這里整理了幾種瀏覽器的調試方法,有需要的小伙伴可以參考下2016-08-08
Java創(chuàng)建線程的七種方法總結(全網最全面)
線程是Java中的基本執(zhí)行單元,它允許程序在同一時間執(zhí)行多個任務,下面這篇文章主要給大家總結介紹了關于Java創(chuàng)建線程的七種方法,文中通過實例代碼將這七種方法介紹的非常詳細,需要的朋友可以參考下2023-05-05
Spring?Boot自動配置的原理及@Conditional條件注解
這篇文章主要介紹了Spring?Boot自動配置的原理及@Conditional條件注解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,感興趣的朋友可以參考一下2022-07-07
spring boot使用properties定義短信模板的方法教程
這篇文章主要給大家介紹了關于spring boot使用properties定義短信模板的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-01-01

