关于redis的几个问题
发布于 9 年前 作者 im-here 4752 次浏览 最后一次编辑是 8 年前 来自 问答

目前项目里用到里redis,连接是做成连接池的,每个client用完后先quit然后再release。但是最近在做压力测试的时候发现报如下错: Redis connection gone from close event. 我就怀疑是不是我做了quit和release操作,然后我把所有代码里的clinet.quit()注释掉后,发现确实少了很多这个错,但是还是有几个。

  1. 想问问上面的错应该如何处理?
  2. 连接有没有必要做成连接池?
  3. 如果在操作结束后不调用client.quit(),是不是connected_clients值会只增不减?

关于问题3我测试了下,当我把client.quit()代码注释掉后,第一次压力测试的时候connected_clients达到了34,后面一直没再增加了,但是也并未减少。

5 回复

大概想了一下:

  • 你那个问题会不会是在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连接就好

我随便找的一篇文章, 可以参考一下

http://www.tuicool.com/articles/7biABn

回到顶部