使用RedisAPI的Vertx 3.7.0+-HMSET

时间:2019-10-07 06:42:41

标签: redis vert.x

在Vertx 3.7之前,我们使用RedisClient进行如下操作:

DataTable

按照documentation中的解释,新的Redis API应该允许平滑迁移。

但是,像以前一样,不允许使用此方法。唯一可用的方法是:

DataSource

我们该如何处理?

我尝试将参数作为列表传递,但是没有用。

DataGridView

2 个答案:

答案 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())));