recherche

Maison  >  Questions et réponses  >  le corps du texte

php - Comment résoudre le délai d'expiration du lien d'une instruction msyql?

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 !

为情所困为情所困2807 Il y a quelques jours779

répondre à tous(3)je répondrai

  • 某草草

    某草草2017-05-16 13:12:50

    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.

    répondre
    0
  • 怪我咯

    怪我咯2017-05-16 13:12:50

    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

    répondre
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-16 13:12:50

    Utilisez simplement la fonction mysql_ping pour déterminer si elle est connectée :

        if (!mysql_ping ($conn)) {
           mysql_close($conn);
           $conn = mysql_connect('localhost','user','pass');
           mysql_select_db('db',$conn);
        }

    répondre
    0
  • Annulerrépondre