在Vertx 3.7之前,我们使用RedisClient进行如下操作:
DataTable
按照documentation中的解释,新的Redis API应该允许平滑迁移。
但是,像以前一样,不允许使用此方法。唯一可用的方法是:
DataSource
我们该如何处理?
我尝试将参数作为列表传递,但是没有用。
DataGridView
答案 0 :(得分:0)
RedisAPI
遵循redis官方文档,该文档指出hmset
接收格式为key, value[, key, value]...
的参数列表。
我认为应该改进RedisAPI
以便将JsonObjects
转换为该特定示例的列表。
答案 1 :(得分:0)
我最终写了util方法来克服这个问题。 (感谢Paulo的解释。)
/**
* Utility method to convert a Json key:value pairs to a list
* We use this to pass the JSON as an argument to the redis HMSET method
* https://redis.io/commands/hmset
* @param json
* @return
*/
private static List<String> toList(JsonObject json){
List<String> res = new ArrayList<>();
for (Map.Entry<String, Object> e : json.getMap().entrySet()){
res.add(e.getKey());
res.add((String) e.getValue());
}
return res;
}
/**
* Utility method to convert a redis response [key, val, key, val ...] to a Json
* We use this to parse the JSON from Redis native response
* @param redisResponse
* @return
*/
private static JsonObject toJson(Response redisResponse){
JsonObject json = new JsonObject();
for (String key : redisResponse.getKeys()){
json.put(key, redisResponse.get(key).toString());
}
return json;
}
然后可以使用它,例如:
List<String> args = toList(config);
args.add(0, "someKey");
redis.hmset(args, res -> { });
和
redis.hgetall("someKey", res1 -> {
if (res1.succeeded()) {
handler.handle(Future.succeededFuture(toJson(res1.result())));