jedis换成redisson, map数据转json不一致问题

在项目迁移时,遇到map结构存储的json文本不一致问题。A项目用jedis,B项目用redisson,B项目需使用自定义编码器,json序列化框架为springBoot自带的jackson。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在迁移项目中, 遇到了map结构存储的json文本不一致问题

A项目使用的是jedis
B项目使用的是redisson

因此B项目需要使用自定义的编码器, json序列化框架是springBoot自带的jackson

public <T> RMap<String, T> getRMap(String key, Class<T> clazz) {
    RMap<String, T> mapCache = redissonClient.getMap(key, new MyCodec(clazz));
    return mapCache;
}

public class MyCodec extends BaseCodec {
    private TypedJsonJacksonCodec typedJsonJacksonCodec;
    private StringCodec stringCodec;

    public MyCodec(Class<?> valueClass) {
        typedJsonJacksonCodec = new TypedJsonJacksonCodec(valueClass);
        stringCodec = new StringCodec();
    }

    @Override
    public Decoder<Object> getValueDecoder() {
        return stringCodec.getValueDecoder();
    }

    @Override
    public Encoder getValueEncoder() {
        return stringCodec.getValueEncoder();
    }

    @Override
    public Decoder<Object> getMapValueDecoder() {
        return typedJsonJacksonCodec.getValueDecoder();
    }

    @Override
    public Encoder getMapValueEncoder() {
        return typedJsonJacksonCodec.getValueEncoder();
    }

    @Override
    public Decoder<Object> getMapKeyDecoder() {
        return stringCodec.getValueDecoder();
    }

    @Override
    public Encoder getMapKeyEncoder() {
        return stringCodec.getValueEncoder();
    }

}
在Redis中,`HGETALL`命令用于获取哈希表(Hash)的所有键值对。当从Redis获取到所有数据后,如果想要将它们换为`std::map<std::string, std::string>`(C++中)或者类似Python中的字典结构,你可以按照以下步骤操作: 1. **连接Redis**: 首先,你需要通过合适的客户端库(如JedisJava)、Predis(PHP)等)连接到Redis服务器。 2. **执行HGETALL**: 使用`HGETALL`命令获取哈希表的所有键值对。这会返回一个字符串列表,列表中的每个元素是一个键值对,形式是"key=value"。 3. **解析数据**: 将这些字符串分割成两个部分,分别作为键(Key)和值(Value)。可以遍历这个列表,使用`std::pair`、`std::make_pair`或者其他语言映射类型的构造函数创建键值对。 4. **构建Map**: 创建一个空的`std::map`,然后将每个键值对插入到地图中。对于每一对"key=value",可以使用`map[key] = value`的形式添加。 5. **返回Map**: 最后,返回处理后的`std::map`。 这里是一个简单的C++示例代码片段: ```cpp #include <unordered_map> #include <vector> std::unordered_map<std::string, std::string> hgetAllToMap(const std::vector<std::string>& result) { std::unordered_map<std::string, std::string> map; for (const auto& pair : result) { size_t pos = pair.find('='); if (pos != std::string::npos) { std::string key = pair.substr(0, pos); std::string value = pair.substr(pos + 1); map[key] = value; } } return map; } ``` 这里的`result`是你从Redis获取的键值对列表。记住,这个例子假设输入的数据格式是正确的,实际应用中可能需要处理可能出现的错误情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值