私は、ほぼ60システムからのデータを格納するために共通のredisを使用しています。この共通のredisは、すべてのマシン間の通信に使用されます。最初はすべてが正常に動作していたようですが、マシンを60から80に増やすと、再接続への接続数が増え、その後大きな問題を引き起こす接続を受け入れなくなりました。TIME_WAIT状態で開かれた複数の接続を再開する
「netstat -na |」を使用して問題をデバッグし始めたとき、 grep 6379 'redisに接続するたびに、特定のポートでTCP/IP接続を開き、その接続を解放せず、$ redis-> quit()を呼び出した後でもTIME_WAIT状態でほぼ60秒間その接続を保持していたことがわかりました。私はこの問題を克服しようとした
メソッド(PHPのpredisライブラリを使用して):
1)Iは、/ proc/sys/net/IPv4の/ tcp_fin_timeoutでTIMEWAIT秒を減少しようとしたが、それは正しい解決策ではありませんでした。
2)I)はnodejsにPHPからシフトしnodejsに接続プーリングを試みたが、何success.Hereサンプルコード
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"});
});
});
}ではありません。
この問題を効率的に解決する方法はありませんか、またはデータ構造機能を持つ任意の代替方法がありますか。
ご協力いただければ幸いです。
私はあなたがpredisライブラリ上)(終了使用していたことを読んだことがある '$クライアント - > disconnect() '?私はphpredisを使用していますが、close()を使用することもできます。 – Efx