J'ai utilisé le framework thinkphp
en mode ligne de commande
pour écrire une boucle infinie
Je veux m'assurer que mes opérations logiques
ne soient jamais interrompues
et exécutées une fois par seconde
>Le code est le suivant
index de fonction publique()
{
$redis = new \Redis\Redis();//Instancier Redis
$redis_res = $redis ->
si ($redis_res !== 'PONG') {
error_log('/tmp/1.log', $e->getMessage());
}
$abb = M('abb');//instanciation
$je = 0 ;
tandis que (vrai) {
//Utilisé pour gérer le délai d'expiration de la base de données de connexion Méthode 1
$i++;
si ($i >= 1000) {
$je = 0 ;
$abb = M('abb');
}
//////////Opérations logiques////////////
essayer {
$result1 = $abb->add(array('a' => 'abc'));//Base de données d'opération
} attraper (\Exception $e) {
error_log('/tmp/2.log', $e->getMessage());
}
essayer {
$result2 = $redis -> Lpush('abc',$result1);//Opération redis
} attraper (\Exception $e) {
error_log('/tmp/3.log', $e->getMessage());
}
//////////Opérations logiques////////////
dormir(1);
}
Mais il y a un problème. MySQL se déconnectera automatiquement si le lien vers la base de données prend trop de temps
2006 : le serveur MySQL a disparu
wait_timeout est par défaut de 8 heures,
augmenter wait_timeout n'est pas long -term solution.,
Je veux donc re-M('abb') lors de l'exécution 1000 fois, mais cela ne semble toujours pas fonctionner. Ne re-M('abb') re-train=. un lien vers la base de données ?
Existe-t-il d'autres solutions ?
Comment puis-je m'assurer que ma base de données liée ne sera pas interrompue ?
Y a-t-il un problème de délai d'expiration du lien lors du fonctionnement de Redis ?
Demandez conseil !
Il est préférable de se reconnecter à la base de données à chaque fois. Votre erreur peut être causée par un lien perdu.
Ajustez les valeurs des paramètres de c3p0 liés à la base de données afin qu'elles ne puissent pas être trop différentes de la base de données wait_timeout
Utilisez simplement la fonction mysql_ping pour déterminer si elle est connectée :