Java对象列表正反序列化在redis中存储 / 获取(没有那么麻烦)

        今天在赶项目的时候,有一个业务场景,一个要求将一个List<CardInfo>序列化后存储到redis中以及将其提取出来反序列化为List<CardInfo>

序列化为JSONString: 

@Component
public class RedisUtil {

    @Resource
    StringRedisTemplate stringRedisTemplate;

    public List<String> getListFromRedis(String key) {
        return stringRedisTemplate.opsForList().range(key, 0, -1);
    }

    /**
     * 序列化java对象为json字符串,而不是一个String(这样子反序列化才能实现)
     */
    public void saveJsonStringToRedis(String key, List<?> dataList, Integer validTime) {
        List<String> stringDataList = dataList.stream()
                .parallel()
                .filter(Objects::nonNull)
                .map(data -> {
                    try {
                        return new ObjectMapper().writeValueAsString(data);
                    } catch (JsonProcessingException e) {
                        throw new RuntimeException(e);
                    }
                })
                .collect(Collectors.toList());
        stringRedisTemplate.opsForList().rightPushAll(key, stringDataList);
        stringRedisTemplate.expire(key, validTime, TimeUnit.MINUTES);
    }
}

注意这里不要将该对象通过toString()序列化为一个普通String,这样子在反序列化的时候有的你哭,很麻烦的,乖,听我的,转JSONString,给自己留条后路


反序列化

// 从redis中找到他刚才选择的数据
        List<String> cardInfoListString = redisUtil.getListFromRedis(userId + Constants.SPECIAL_PAY_SUFFIX);
        if (cardInfoListString == null || cardInfoListString.size() == 0) {
            return false;
        }
        ObjectMapper mapper = new ObjectMapper();
        List<CardInfo> cardInfoList = cardInfoListString.stream()
                .parallel()
                .map(cardInfo -> {
                    try {
                        return mapper.readValue(cardInfo, CardInfo.class);
                    } catch (JsonProcessingException e) {
                        throw new RuntimeException(e);
                    }
                })
                .collect(Collectors.toList());
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学徒630

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值