我用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操作有链接超时的问题吗?
求指导!
Adalah yang terbaik untuk menyambung semula ke pangkalan data setiap kali. Ralat anda mungkin disebabkan oleh pautan yang hilang.
Laraskan nilai parameter c3p0 yang berkaitan dengan pangkalan data supaya ia tidak boleh terlalu berbeza daripada pangkalan data wait_timeout
Hanya gunakan fungsi mysql_ping untuk menentukan sama ada ia disambungkan: