|
@@ -0,0 +1,69 @@
|
|
|
+package com.caimei.config;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
|
|
+import com.fasterxml.jackson.annotation.PropertyAccessor;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import org.springframework.cache.annotation.EnableCaching;
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
+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 java.io.Serializable;
|
|
|
+import java.time.Duration;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Description
|
|
|
+ *
|
|
|
+ * @author : Charles
|
|
|
+ * @date : 2021/4/28
|
|
|
+ */
|
|
|
+@Configuration
|
|
|
+@EnableCaching
|
|
|
+public class RedisCacheConfig implements Serializable {
|
|
|
+/**
|
|
|
+ * 最新版,设置redis缓存过期时间
|
|
|
+ */
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
|
|
|
+ return new RedisCacheManager(
|
|
|
+ RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
|
|
|
+ // 默认策略,未配置的 key 会使用这个,3小时失效
|
|
|
+ this.getRedisCacheConfigurationWithTtl( 3 * 60 * 60),
|
|
|
+ // 指定 key 策略
|
|
|
+ this.getRedisCacheConfigurationMap()
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
|
|
|
+ Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
|
|
|
+ //自定义设置缓存时间,6小时
|
|
|
+// redisCacheConfigurationMap.put("getCommodityClassify", this.getRedisCacheConfigurationWithTtl(6 * 60 * 60));
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|