将Java对象作为值保存到Redis
我想将一个非常复杂的java对象作为值保存到redis。因此,我尝试将此对象转换为Json(gson lib),但它不符合我的目的(请参阅其他问题:) 我想将上面提到的应用程序的复杂java对象作为值存储/序列化到redis,并稍后加载回复杂java对象(考虑以下注释:)。这只是为了评估的目的 如何将这个复杂的对象(最好是json转换)存储到redis和redis?每一条评论都会有帮助将Java对象作为值保存到Redis,java,json,object,redis,gson,Java,Json,Object,Redis,Gson,我想将一个非常复杂的java对象作为值保存到redis。因此,我尝试将此对象转换为Json(gson lib),但它不符合我的目的(请参阅其他问题:) 我想将上面提到的应用程序的复杂java对象作为值存储/序列化到redis,并稍后加载回复杂java对象(考虑以下注释:)。这只是为了评估的目的 如何将这个复杂的对象(最好是json转换)存储到redis和redis?每一条评论都会有帮助 更新1:与json的对话正在进行中,但随着应用程序中的进一步进程,系统将生成一个与XXX不兼容的java.u
更新1:与json的对话正在进行中,但随着应用程序中的进一步进程,系统将生成一个与XXX不兼容的
java.util.LinkedHashMap
SuperclassExclusionStrategy ex = new SuperclassExclusionStrategy();
Gson gson = new GsonBuilder().addDeserializationExclusionStrategy(ex).addSerializationExclusionStrategy(ex).create();
String json = gson.toJson(daoResult);
daoResultJson = gson.fromJson(json, JavaObject_DAOListResult.class);
子类中有一些对象尚未转换回原始状态
已解决
我已经解决了使用另一个名为
现在我可以很好地处理我的对象了。在Gson中,json字符串中缺少许多空属性。使用json io,空属性也被转换。以下是解决方案:
// convert daoResult to JSON
jsonIO = JsonWriter.objectToJson(daoResult);
// convert stored JSON to daoResult
daoResultJson = (DAOListResult) JsonReader.jsonToJava(jsonIO);
假设您解决了将对象转换为JSON的另一个问题(与此问题不同),我想,您可以将JSON字符串设置为Redis键,然后稍后再获取:
127.0.0.1:6379> SET blah '{"some": "x", "some_other": "y"}'
OK
127.0.0.1:6379> GET blah
"{\"some\": \"x\", \"some_other\": \"y\"}"
您需要在Java对象和JSON之间构建一个序列化器/反序列化器,但这就是使用Redis所需的全部工作。您也可以使用Redis散列与HSET
和HGET
来实现相同的功能,但是您在问题中没有提供足够的信息,我无法推荐更适合您的情况。我能够将复杂的java对象转换为json,反之亦然,但对复杂对象的进一步处理引发了一个错误java.util.LinkedHashMap与当前问题是将Json字符串转换回原始对象,给出的错误java.util.LinkedHashMap与XXX不兼容