目前项目里用到里redis,连接是做成连接池的,每个client用完后先quit然后再release。但是最近在做压力测试的时候发现报如下错: Redis connection gone from close event. 我就怀疑是不是我做了quit和release操作,然后我把所有代码里的clinet.quit()注释掉后,发现确实少了很多这个错,但是还是有几个。
- 想问问上面的错应该如何处理?
- 连接有没有必要做成连接池?
- 如果在操作结束后不调用client.quit(),是不是connected_clients值会只增不减?
关于问题3我测试了下,当我把client.quit()代码注释掉后,第一次压力测试的时候connected_clients达到了34,后面一直没再增加了,但是也并未减少。
大概想了一下:
-
你那个问题会不会是在client对象quit之后和重新初始化之前执行了命令?这个应该是可以试出来。
-
我们这边项目中是没有对Redis做成连接池的,因为Redis内部执行命令也是
event-based
的(不像MySQL),所以没有创建多个连接的需要 -
按道理是的,不过具体也要看你线程池是怎么实现了,而且也存在Redis那边的连接数限制问题
@CoderIvan 首先非常感谢你的回答。还在查上面那个问题。 那如果不做成连接池,是不是如下这样就可以了?要不要client.quit()?
var redis = require("redis");
module.exports = MyRedis;
function MyRedis(dbidx) {
}
var client = redis.createClient(6379, '127.0.0.1');
MyRedis.prototype.set = function (key, value, cb) {
client.set(key, value, function (error, reply) {
client.quit();
cb(error, reply);
});
};
我们这边是不需要quit的,保证一个应用有且只有一个Redis连接就好
我随便找的一篇文章, 可以参考一下
@CoderIvan 谢谢!