【发布时间】:2016-10-15 06:26:18
【问题描述】:
我正在使用通用redis来存储来自近60个系统的数据。这个通用redis用于所有机器之间的通信。起初一切似乎都运行良好,但随着我将机器从 60 增加到 80,到 redis 的连接数增加了,之后它就不再接受任何连接,这导致了一个大问题。
当我开始使用 'netstat -na | 调试问题时grep 6379' 我发现每当我们连接到 redis 时,它都会在特定端口打开一个 TCP/IP 连接并且没有释放该连接,并且即使在调用 $redis->quit() 之后,该连接仍保持在 TIME_WAIT 状态近 60 秒(使用 PHP 的 predis 库)
我试图解决这个问题的方法:
1) 我尝试减少 /proc/sys/net/ipv4/tcp_fin_timeout 中的 timewait 秒数,但这不是正确的解决方案。
2)我从 PHP 转移到 nodejs 并尝试在 nodejs 中进行连接池但没有成功。这里是示例代码
app.get('/setinredis',function(req,res){
var poolRedis = require('pool-redis')({
'host': 'localhost',
'password': '',
'maxConnections': 5
});
poolRedis.getClient(function(client, done) {
client.get('somekey', function(err, value) {
console.log('value from redis is:', value);
done();
res.send({message:"Done"});
});
});
});
有没有什么方法可以有效地解决这个问题,或者有什么替代redis的数据结构功能。
任何帮助将不胜感激。
【问题讨论】:
-
我听说你在predis库上使用了quit(),你试过
$client->disconnect()吗?我用的是phpredis,你也可以用close()
标签: php node.js redis tcp-ip netstat