Skip to content

Commit 0f75948

Browse files
committed
更新 Spring Cache 缓存过期时间
1 parent 11033c2 commit 0f75948

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

spring-boot-redis/src/main/java/com/springboot/springbootredis/config/RedisCacheConfig.java

+37
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
11
package com.springboot.springbootredis.config;
22

3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
4+
import com.fasterxml.jackson.annotation.PropertyAccessor;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
36
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
47
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
8+
import org.springframework.cache.CacheManager;
59
import org.springframework.context.annotation.Bean;
610
import org.springframework.context.annotation.Configuration;
11+
import org.springframework.data.redis.cache.RedisCacheConfiguration;
12+
import org.springframework.data.redis.cache.RedisCacheManager;
13+
import org.springframework.data.redis.cache.RedisCacheWriter;
14+
import org.springframework.data.redis.connection.RedisConnectionFactory;
715
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
816
import org.springframework.data.redis.core.RedisTemplate;
917
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
18+
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
19+
import org.springframework.data.redis.serializer.RedisSerializationContext;
1020
import org.springframework.data.redis.serializer.StringRedisSerializer;
1121

1222
import java.io.Serializable;
23+
import java.time.Duration;
1324

1425
/**
1526
* @Version: 1.0
@@ -27,4 +38,30 @@ public RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionF
2738
template.setConnectionFactory(redisConnectionFactory);
2839
return template;
2940
}
41+
42+
@Bean
43+
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
44+
return new RedisCacheManager(
45+
RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
46+
this.getRedisCacheConfigurationWithTtl(600) // 默认策略,未配置的 key 会使用这个
47+
);
48+
}
49+
50+
private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
51+
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
52+
ObjectMapper om = new ObjectMapper();
53+
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
54+
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
55+
jackson2JsonRedisSerializer.setObjectMapper(om);
56+
57+
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
58+
redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
59+
RedisSerializationContext
60+
.SerializationPair
61+
.fromSerializer(jackson2JsonRedisSerializer)
62+
).entryTtl(Duration.ofSeconds(seconds));
63+
64+
return redisCacheConfiguration;
65+
}
66+
3067
}

0 commit comments

Comments
 (0)