|
@@ -1,13 +1,26 @@
|
|
package com.mooctest.crowd.site.configuration;
|
|
package com.mooctest.crowd.site.configuration;
|
|
|
|
|
|
|
|
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
|
|
|
+import com.fasterxml.jackson.annotation.PropertyAccessor;
|
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
|
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
|
|
|
|
+import org.springframework.data.redis.cache.RedisCacheManager;
|
|
|
|
+import org.springframework.data.redis.cache.RedisCacheWriter;
|
|
|
|
+import org.springframework.data.redis.connection.RedisConnectionFactory;
|
|
|
|
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
|
|
|
+import org.springframework.data.redis.serializer.RedisSerializationContext;
|
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
|
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
|
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
|
|
import org.springframework.session.web.http.CookieSerializer;
|
|
import org.springframework.session.web.http.CookieSerializer;
|
|
import org.springframework.session.web.http.DefaultCookieSerializer;
|
|
import org.springframework.session.web.http.DefaultCookieSerializer;
|
|
|
|
|
|
|
|
+import java.time.Duration;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.Map;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* @author: Diors.Po
|
|
* @author: Diors.Po
|
|
* @Email: 171256175@qq.com
|
|
* @Email: 171256175@qq.com
|
|
@@ -20,6 +33,8 @@ public class RedisSessionConfiguration {
|
|
@Value("${website.domain}")
|
|
@Value("${website.domain}")
|
|
private String domainName;
|
|
private String domainName;
|
|
|
|
|
|
|
|
+ @Value("${cache.expire.duration}")
|
|
|
|
+ private int expireDuration;
|
|
|
|
|
|
@Bean
|
|
@Bean
|
|
public CookieSerializer cookieSerializer() {
|
|
public CookieSerializer cookieSerializer() {
|
|
@@ -40,4 +55,44 @@ public class RedisSessionConfiguration {
|
|
return new CustomSessionDefaultRedisSerializer();
|
|
return new CustomSessionDefaultRedisSerializer();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 最新版,设置redis缓存过期时间
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ @Bean
|
|
|
|
+ public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
|
|
|
|
+ return new RedisCacheManager(
|
|
|
|
+ RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
|
|
|
|
+ this.getRedisCacheConfigurationWithTtl(expireDuration), // 默认策略,未配置的 key 会使用这个
|
|
|
|
+ this.getRedisCacheConfigurationMap() // 指定 key 策略
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
|
|
|
|
+ Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
|
|
|
|
+ //SsoCache和BasicDataCache进行过期时间配置
|
|
|
|
+ redisCacheConfigurationMap.put("messageCache", this.getRedisCacheConfigurationWithTtl(30 * 60));
|
|
|
|
+
|
|
|
|
+ //自定义设置缓存时间
|
|
|
|
+ redisCacheConfigurationMap.put("userCache", this.getRedisCacheConfigurationWithTtl(expireDuration));
|
|
|
|
+
|
|
|
|
+ return redisCacheConfigurationMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
|
|
|
|
+ Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
|
|
|
|
+ ObjectMapper om = new ObjectMapper();
|
|
|
|
+ om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
|
|
|
+ om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
|
|
|
|
+ jackson2JsonRedisSerializer.setObjectMapper(om);
|
|
|
|
+ RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
|
|
|
|
+ redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
|
|
|
|
+ RedisSerializationContext
|
|
|
|
+ .SerializationPair
|
|
|
|
+ .fromSerializer(jackson2JsonRedisSerializer)
|
|
|
|
+ ).entryTtl(Duration.ofSeconds(seconds));
|
|
|
|
+
|
|
|
|
+ return redisCacheConfiguration;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|