java - 转换地图使用 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,希望这种映射可能已经解决了。是的,至少不要寻找客户更改作为答案。
解决方案
您不是单独使用这些字段,而是同时使用这些字段。因此,我建议您使用简单明了的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来进行序列化/反序列化。不用说,您可以使用任何库。
推荐阅读
- sql - 如何将值插入到 SQL Server 中的联结/链接表中?
- php - 在 laravel 中更新关系
- semantic-versioning - semver:匹配预发布后缀 (3.* =/= 3.4.5-1)
- hibernate - Hibernate过滤SpringBoot中的关联实体
- python - 如何使用 NLP 获取句子的含义?
- angular5 - 使用 css 类选择器在角度组件上传递输入属性
- javascript - jQuery 产品数量?
- php - 从 WP_Query 中的当前产品类别术语 ID 获取所有 Woocommerce 产品
- serverless - Openwhisk: request has not yet finished
- sql - SQL 用 < 和 > 替换 @lt 和 @gt