vertx-redis-client 3.7.0: дешево ли создавать клиент redis при каждом запросе http - PullRequest
0 голосов
/ 27 апреля 2019

Я использую vertx-redis-client в одном из моих проектов. Я создаю Redis клиент, как это:

private void createRedisClient(final Handler<AsyncResult<Redis>> redisHandler) {
    Redis.createClient(vertx, AppSettings.REDIS_OPTIONS)
            .connect(onConnect -> {
                if (onConnect.succeeded()) {
                    System.out.println("Redis got connected");
                    Redis redisClient = onConnect.result();

                    redisHandler.handle(onConnect);

                    redisClient.exceptionHandler(e -> {
                        e.printStackTrace();

                        attemptReconnect(0, redisHandler);
                    });
                } else {
                    onConnect.cause().printStackTrace();
                    redisHandler.handle(onConnect);
                }
            });
}

Но мне нужно переключить Redis DB на основе параметров входного JSON API JSON. Итак, разумно ли (исполнитель) создавать Redis-клиент для каждого запроса и подключаться к необходимой БД? Или я должен объединить мои клиенты Redis как-нибудь?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Создание подключения для каждого доступа к Redis снизит производительность вашего приложения.

Получение хорошей производительности от Redis также зависит от того, насколько хорошо вы спроектировали свои структуры данных.В идеале вы должны получить (или записать) все данные за один вызов - например, вы можете иметь все свои ключи в одном БД и организовать тесно связанные данные с одним и тем же ключом, чтобы вы могли выполнить свою работу водин HGET / HSET.

Если это невозможно, я бы порекомендовал вам создать пул клиентов Redis, которые уже подключены к базе данных, к которой вы получите доступ.Один клиент Redis может иметь несколько открытых соединений, так как keep-alive включен по умолчанию.

1 голос
/ 28 апреля 2019

Это совсем не дешево.

Если у вас более одного клиента Redis, вы должны поместить их в какую-то параллельную карту и использовать атомарные операции для получения этих клиентов в зависимости от ваших параметров.

...