springboot之redis cache TTL選項的使用
更新時間:2023年07月26日 08:54:37 作者:sayyy
這篇文章主要介紹了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即可。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
springboot如何設置請求參數(shù)長度和文件大小限制
這篇文章主要介紹了springboot如何設置請求參數(shù)長度和文件大小限制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
深入Spring Boot實現(xiàn)對Fat Jar jsp的支持
這篇文章主要介紹了深入Spring Boot實現(xiàn)對Fat Jar jsp的支持,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
mybatis plus 關聯(lián)數(shù)據(jù)庫排除不必要字段方式
這篇文章主要介紹了mybatis plus 關聯(lián)數(shù)據(jù)庫排除不必要字段方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

