我在我的一个项目中使用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客户?
答案 0 :(得分:1)
这根本不便宜。
如果您有多个Redis客户端,则应将它们放在某种并发映射中,并根据您的参数使用原子操作来获取这些客户端。
答案 1 :(得分:1)
为对Redis的每次访问创建连接都会破坏应用程序的性能。
从Redis获得良好的性能还与您设计数据结构的方式有关。理想情况下,您应该在单个调用中获取(或写入)所有数据-例如,您可以将所有键放在单个数据库中,并使用相同的键组织紧密关联的数据,以便可以在单个HGET / HSET。
如果无法实现,建议您创建一个Redis客户端池,该池已连接到您将访问的数据库。单个Redis客户端可以打开多个连接,因为默认情况下保持活动状态为打开。