• SpringBoot——》更改Redis序列化方式


    推荐链接:
        总结——》【Java】
        总结——》【Mysql】
        总结——》【Redis】
        总结——》【Kafka】
        总结——》【Spring】
        总结——》【SpringBoot】
        总结——》【MyBatis、MyBatis-Plus】
        总结——》【Linux】
        总结——》【MongoDB】
        总结——》【Elasticsearch】

    一、序列化方式

    1. GenericJackson2JsonRedisSerializer
    2. GenericToStringSerializer
    3. Jackson2JsonRedisSerializer
    4. JdkSerializationRedisSerializer(默认使用)
    5. StringRedisSerializer
    6. 自定义 Serializer

    二、使用默认序列化方式

    1、代码示例

    package com.xiaoxian.demo.controller;
    
    import com.alibaba.fastjson.JSON;
    import com.xiaoxian.demo.domain.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    @RestController
    public class RedisTestController {
    
        @Autowired
        RedisTemplate redisTemplate;
    
    
        @GetMapping("/redis/test1")
        public void test1() {
            List<User> list = new ArrayList<>();
            User user = new User();
            user.setId(1);
            user.setName("测试");
            list.add(user);
            redisTemplate.opsForValue().set("strTest1", JSON.toJSONString(list));
    
            Map<String, Object> map = new HashMap<>(2);
            map.put("id", 1);
            map.put("name", "测试");
            redisTemplate.opsForHash().putAll("mapTest1", map);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    2、访问接口

    http://127.0.0.1:8080/redis/test

    3、结果示例

    image.png
    image.png

    三、更改序列化方式

    1、代码示例

    package com.xiaoxian.demo.config;
    
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
    import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
    import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
    import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
    import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
    import org.springframework.context.annotation.Bean;
    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.StringRedisSerializer;
    import org.springframework.stereotype.Component;
    
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    
    @Component
    public class RedisConfig {
        @Bean
        public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate redisTemplate = new RedisTemplate();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
    
            // key的序列化方式
            StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    
            // value的序列化方式
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    
            // 创建ObjectMapper对象,基于此对象进行序列化和反序列化
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    
            //LocalDatetime序列化
            JavaTimeModule timeModule = new JavaTimeModule();
            timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    
            objectMapper.registerModule(timeModule);
    
            objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            //对象属性值为null时,不进行序列化存储
            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    
            // 设置序列化方式
            redisTemplate.setKeySerializer(stringRedisSerializer);
            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
    
            redisTemplate.setHashKeySerializer(stringRedisSerializer);
            redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
    
            // 更新RedisTemplate对象的默认配置
            redisTemplate.afterPropertiesSet();
            return redisTemplate;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    2、访问接口

    http://127.0.0.1:8080/redis/test

    3、结果示例

    image.png
    image.png

    四、自定义序列化方式

  • 相关阅读:
    报错 documentation/kbuild: is a directory. stop(Windows 内置Linux子系统WSL编译Linux内核)
    Dialog动画相关
    在IDEA中的DeBug调试技巧
    量子计算(九):复合系统与联合测量
    芯科科技推出新的8位MCU系列产品,扩展其强大的MCU平台
    基于springboot+vue的员工绩效考核与激励系统
    【HBuilder X】解决HBuilder X内置浏览器显示过大影响使用
    Lambda 表达式
    机器学习知识点总结
    Dart(1)-简介
  • 原文地址:https://blog.csdn.net/weixin_43453386/article/details/133686577