Vertx 3.7.0+ Использование RedisAPI - HMSET - PullRequest
0 голосов
/ 07 октября 2019

До Vertx 3.7 мы использовали RedisClient для выполнения таких операций, как:

    redis.hmset(someString, someJsonObject, res -> {... });

Новый API Redis должен обеспечивать плавную миграцию, насколько это объясняется в документации .

Однако этот метод не разрешен, как раньше. Единственный доступный метод:

default RedisAPI hmset(List<String> args, Handler<AsyncResult<Response>> handler)

Как мы можем это сделать?

Я попытался передать параметры в виде списка, но это не сработало.

redis.hmset(Arrays.asList(someString, someJsonObject.encode()), res -> { });

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

В итоге я написал утилитарные методы для преодоления этого. (Благодаря объяснениям Пауло.)

/**
 * 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())));
0 голосов
/ 07 октября 2019

RedisAPI следует официальной документации redis, в которой говорится, что hmset получает список аргументов в формате: key, value[, key, value]....

Я думаю, что RedisAPI следует улучшить, чтобы преобразовать JsonObjectsв список для этого конкретного примера.

...