我用thinkphp框架
在命令列模式下
寫了一個死循環
我要保證我的邏輯操作
永遠不會中斷
而且每秒執行一次
程式碼如下
public function index()
{
$redis = new \Redis\Redis();//实例化redis
$redis_res = $redis -> ping();
if ($redis_res !== 'PONG') {
error_log('/tmp/1.log', $e->getMessage());
}
$abb = M('abb');//实例化
$i = 0;
while(true) {
//用来处理链接数据库超时 方法1
$i++;
if ($i >= 1000) {
$i = 0;
$abb = M('abb');
}
//////////逻辑操作///////////
try {
$result1 = $abb->add(array('a' => 'abc'));//操作数据库
} catch (\Exception $e) {
error_log('/tmp/2.log', $e->getMessage());
}
try {
$result2 = $redis -> Lpush('abc',$result1);//操作redis
} catch (\Exception $e) {
error_log('/tmp/3.log', $e->getMessage());
}
//////////逻辑操作///////////
sleep(1);
}
}
但有一個問題我這個連結資料庫時間過長會MySQL會自動斷掉
2006:MySQL server has gone away
wait_timeout預設是8小時,
去增加wait_timeout 也不是長久之計,
所以我想執行1000次時重新M('abb') ,但好像還是不行,重新M('abb')不是重新練=連結資料庫嗎?
有沒有其他解決方案?
如何保證我的連結資料庫不會中斷?
redis操作有連結逾時的問題嗎?
求指導!
淡淡烟草味2017-05-16 13:12:50
用mysql_ping函數判斷是否連接就好:
if (!mysql_ping ($conn)) {
mysql_close($conn);
$conn = mysql_connect('localhost','user','pass');
mysql_select_db('db',$conn);
}