001package run.iget.framework.common.config;
002
003import org.springframework.context.annotation.Bean;
004import org.springframework.context.annotation.Configuration;
005import org.springframework.data.redis.connection.RedisConnectionFactory;
006import org.springframework.data.redis.core.RedisTemplate;
007import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
008import org.springframework.data.redis.serializer.RedisSerializer;
009
010import com.fasterxml.jackson.annotation.JsonAutoDetect;
011import com.fasterxml.jackson.annotation.PropertyAccessor;
012import com.fasterxml.jackson.databind.ObjectMapper;
013import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
014
015/**
016 * 代码千万行,注释第一行,注释不规范,迭代两行泪
017 * ---------------类描述-----------------
018 * redis序列化配置
019 * ---------------类描述-----------------
020 *
021 * @author 大周
022 * @date 2023/5/26 21:44
023 */
024@Configuration
025public class RedisConfig {
026
027    @Bean
028    public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
029        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(
030                Object.class);
031        ObjectMapper objectMapper = new ObjectMapper();
032        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
033        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
034        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
035
036        return jackson2JsonRedisSerializer;
037    }
038
039    @Bean
040    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
041        RedisTemplate<String, Object> template = new RedisTemplate<>();
042        // Key HashKey使用String序列化
043        template.setKeySerializer(RedisSerializer.string());
044        template.setHashKeySerializer(RedisSerializer.string());
045
046        // Value HashValue使用Jackson2JsonRedisSerializer序列化
047        template.setValueSerializer(jackson2JsonRedisSerializer());
048        template.setHashValueSerializer(jackson2JsonRedisSerializer());
049
050        template.setConnectionFactory(factory);
051        return template;
052    }
053}