vertx-redis-client 3.7.0:在每个http请求上创建redis客户端便宜吗

时间:2019-04-27 16:58:09

标签: java redis vert.x

我在我的一个项目中使用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);
                }
            });
}

但是,我需要根据REST API输入JSON的参数切换redis数据库。那么,为每个请求创建一个Redis客户端 并连接到所需的数据库是否明智(高效)?还是应该以某种方式合并我的redis客户

2 个答案:

答案 0 :(得分:1)

这根本不便宜。

如果您有多个Redis客户端,则应将它们放在某种并发映射中,并根据您的参数使用原子操作来获取这些客户端。

答案 1 :(得分:1)

为对Redis的每次访问创建连接都会破坏应用程序的性能。

从Redis获得良好的性能还与您设计数据结构的方式有关。理想情况下,您应该在单个调用中获取(或写入)所有数据-例如,您可以将所有键放在单个数据库中,并使用相同的键组织紧密关联的数据,以便可以在单个HGET / HSET。

如果无法实现,建议您创建一个Redis客户端池,该池已连接到您将访问的数据库。单个Redis客户端可以打开多个连接,因为默认情况下保持活动状态为打开。