正常使用沒問題。我本地壓測(cè)也沒出現(xiàn)這個(gè)錯(cuò)誤。redis的騰訊云的redis 集群。
服務(wù)器上會(huì)出現(xiàn)這個(gè)錯(cuò)誤。很少但是會(huì)出現(xiàn)。
參考網(wǎng)上示例。把read_write_timeout 改成了0 還是不行。想問下大大,可能是什么原因。跟workerman多進(jìn)程切換有關(guān)系嗎
Predis\Connection\AbstractConnection::onConnectionError code:0 msg:Error while reading line from the server.
redis服務(wù)端有個(gè)timeout配置,是用來關(guān)閉不活躍reids連接的,設(shè)置成0試下
恩我在github看到了一個(gè)答案是說
If you are using Predis in a daemon-like script you should set read_write_timeout to -1 if you want to completely disable the timeout (this value works with older and newer versions of Predis). Also, remember that you must disable the default timeout of Redis by setting timeout = 0 in redis.conf or Redis will drop the connection of idle clients after 300 seconds of inactivity.
說如果守護(hù)進(jìn)程的話使用predis的話要改成-1.
Also, remember that you must disable the default timeout of Redis by setting timeout = 0 in redis.conf
我說的是這個(gè),redis服務(wù)端的配置
@16:這個(gè)啊我看看。這個(gè)值是用來關(guān)閉不活躍的鏈接的。如果設(shè)置為0 的話意思是不在關(guān)閉不活躍的鏈接對(duì)吧?那這樣對(duì)性能會(huì)有影響嗎。我是否可以在我每次我處理完一個(gè)請(qǐng)求之后我程序手動(dòng)關(guān)閉當(dāng)前使用的redis 鏈接?
@16:感覺不行啊。redis已經(jīng)設(shè)置了timeout=0.還是有報(bào)錯(cuò)。手動(dòng)關(guān)閉的話感覺也有點(diǎn)問題
在onWorkerStart里初始化redis,千萬(wàn)不要在onWorkerStart執(zhí)行前就初始化,onWorkerStart執(zhí)行前初始化redis的redis連接屬于主進(jìn)程,fork的子進(jìn)程會(huì)自動(dòng)繼承主進(jìn)程的這個(gè)redis連接,這樣會(huì)導(dǎo)致多個(gè)子進(jìn)程都可以對(duì)同一個(gè)redis連接進(jìn)行讀寫,導(dǎo)致數(shù)據(jù)錯(cuò)亂。
我是在
$http_worker->onWorkerStart = function($http_worker) {
// init app
App::init();
};
onWorkerStart 里初始化的單例的redis。平時(shí)不會(huì)有問題。就是請(qǐng)求量多的時(shí)候會(huì)報(bào)上面那個(gè)錯(cuò)。