| |
| |
| package com.atguigu.servicebase.config; |
| |
| import com.fasterxml.jackson.annotation.JsonAutoDetect; |
| import com.fasterxml.jackson.annotation.PropertyAccessor; |
| import com.fasterxml.jackson.databind.ObjectMapper; |
| import org.springframework.cache.CacheManager; |
| import org.springframework.cache.annotation.CachingConfigurerSupport; |
| 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.connection.RedisConnectionFactory; |
| import org.springframework.data.redis.core.RedisTemplate; |
| 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.StringRedisSerializer; |
| |
| import java.time.Duration; |
| |
| |
| |
| |
| |
| @EnableCaching |
| @Configuration |
| public class RedisConfig extends CachingConfigurerSupport { |
| |
| @Bean |
| public RedisTemplate<String, Object> redisTemplate( |
| RedisConnectionFactory factory) { |
| RedisTemplate<String, Object> template = new RedisTemplate<>(); |
| RedisSerializer<String> redisSerializer = new StringRedisSerializer(); |
| Jackson2JsonRedisSerializer 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); |
| template.setConnectionFactory(factory); |
| |
| template.setKeySerializer(redisSerializer); |
| |
| template.setValueSerializer(jackson2JsonRedisSerializer); |
| |
| template.setHashValueSerializer(jackson2JsonRedisSerializer); |
| return template; |
| } |
| |
| @Bean |
| public CacheManager cacheManager(RedisConnectionFactory factory) { |
| RedisSerializer<String> redisSerializer = new StringRedisSerializer(); |
| Jackson2JsonRedisSerializer 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 config = |
| RedisCacheConfiguration.defaultCacheConfig() |
| .entryTtl(Duration.ofSeconds(600)) |
| .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) |
| .serializeValuesWith(RedisSerializationContext.SerializationPair. |
| fromSerializer(jackson2JsonRedisSerializer)) |
| .disableCachingNullValues(); |
| RedisCacheManager cacheManager = RedisCacheManager.builder(factory) |
| .cacheDefaults(config) |
| .build(); |
| return cacheManager; |
| } |
| } |
| |
| |