使用 Jedis 的值类型,java,redis,objectmapper,jedis,value-type"/>

首页 > 解决方案 > 转换地图使用 Jedis 的值类型

问题描述

所以,我有一个值类型:

class Session {
    long createdAt;
    List<String> postIds;
}

使用绝地客户端(3.0.0-m1重要的是),我目前正在执行hset创建条目并hgetAll检索所有键值:

private redis.clients.jedis.Jedis jedis;

void createSession(String idAsKey, Map<String, String> hashFieldValues) {
    jedis.hset(idAsKey, hashFieldValues);
}


Map<String, String> fetchSession(String idAsKey) {
    return jedis.hgetAll(idAsKey);
}

我目前正在研究的挑战是将转换Map<String, String>Session对象的难易程度。有没有现有的方法可以做到这一点?

等效命令的服务器响应

1) "createdAt"
2) "1556099708307"
3) "postIds"
4) "[a, b, c]"

PS:开始学习Redis,希望这种映射可能已经解决了。是的,至少不要寻找客户更改作为答案。

标签: javaredisobjectmapperjedisvalue-type

解决方案


您不是单独使用这些字段,而是同时使用这些字段。因此,我建议您使用简单明了的Redis 字符串,而不是使用 Redis 哈希。因此,您将set用于保存条目并get检索它们。

使用上述建议,您的代码可能如下所示:

private redis.clients.jedis.Jedis jedis;
private com.google.gson.Gson gson; // see Note

void createSession(String idAsKey, Session object) {
    String serializedValue = gson.toJson(object);
    jedis.set(idAsKey, serializedValue);
}

Session fetchSession(String idAsKey) {
    String serializedValue = jedis.get(idAsKey);
    Session deserializedObject = gson.fromJson(serializedValue, Session.class);
    return deserializedObject;
}

注意:我使用Gson来进行序列化/反序列化。不用说,您可以使用任何库。


推荐阅读