解决redis序列号和反序列化问题

最近遇到了一个问题,将

复制代码
List<Map<String, Object>>
类型数据以list形式存入到redis之后,发现取出来时数据格式完全不对,根据报错信息发现是反序列化问题,遇到类似问题,主要有两种解决方案

1.使用序列号工具

例如,Java中常用的序列化工具有Jackson、Gson等。这些工具能够将对象序列化为字符串,并能够准确地将字符串反序列化为对象。

java 复制代码
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class RedisUtils {
    private static final ObjectMapper objectMapper = new ObjectMapper();

    public static String serialize(Object object) throws JsonProcessingException {
        return objectMapper.writeValueAsString(object);
    }

    public static <T> T deserialize(String json, Class<T> clazz) throws JsonProcessingException {
        return objectMapper.readValue(json, clazz);
    }
}

使用Jackson的ObjectMapper来进行序列化和反序列化操作,serialize方法将对象序列化为字符串,deserialize方法将字符串反序列化为对象

2.使用JSON字符串存储(推荐)

直接使用JSON字符串进行存储。我们可以将对象转换为JSON字符串,并存储到Redis中。当需要获取数据时,我们可以将存储的JSON字符串转换为对象。

java 复制代码
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

// 将 List<Map<String, Object>> 转换为 JSON 字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String json;
        try {
            json = objectMapper.writeValueAsString(list);
        } catch (JsonProcessingException e) {
            logger.error("在listInRedis方法中处理Redis时发生错误", e);
            throw new RuntimeException(e);
        }
        // 存储到 Redis
        redisTemplate.opsForValue().set(key, json);
java 复制代码
// 从 Redis 获取 JSON 字符串
        String value = (String) redisTemplate.opsForValue().get(key);

        // 将 JSON 字符串转换回 List<Map<String, Object>>
        try {
            List<Map<String, Object>> listOfMaps = objectMapper.readValue(value,
                    new TypeReference<List<Map<String, Object>>>() {
                    });
            logger.info("listInRedis从redis中查询到的结果Key:{}-----::{}", key, listOfMaps);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
相关推荐
月华路29 分钟前
G1 GC 对数组与大对象(Humongous)的处理
java·jvm·算法
deli00700744 分钟前
JSON 树形查看器:粘贴即解析,折叠展开一目了然
前端·数据库·json·ai编程
国科安芯1 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座
liangshanbo12151 小时前
虚拟列表深度面试题整理
java·开发语言·前端
破土士V1 小时前
MySQL基础知识集合
数据库·mysql
gugucoding1 小时前
59. 【Java】Spring Boot 入门:第一个 Web 应用
java·开发语言·spring boot
笃行3502 小时前
达梦 VS 金仓:数据库替换项目里,迁移工具的差距体现在哪一层
数据库
笃行3502 小时前
向量数据库之后,一份合同为什么在五个库里对不上
数据库
笃行3502 小时前
数据库迁移工具装在一台笔记本上的年代,该翻篇了
数据库
笃行3502 小时前
一张表底下几千个分片:金仓时序数据库的超表怎么工作
数据库