8
votes

Pourquoi essayer / attraper ne fonctionne pas dans la fonction PHPREDIS Connect?

J'utilise Redis en tant que magasin de cache à travers Phpredis. Cela fonctionne parfaitement et je tiens à fournir un moyen sans échec pour vous assurer que la fonctionnalité de mise en cache est toujours en hausse (à l'aide de la mise en cache basée sur des fichiers, par exemple), même lorsque Redis Server diminue, j'ai initialement proposé le code suivant

<?php
    $redis=new Redis();
    $connected= $redis->connect('127.0.0.1', 6379);
    if(!$connected) {
        // some other code to handle connection problem
        die( "Cannot connect to redis server.\n" );
    }
    $redis->setex('somekey', 60, 'some value');


2 commentaires

$ Redis-> Connect (); ne jette pas une exception si une connexion échoue simplement. Ce que vous pouvez faire est de vérifier si $ redis === true, s'il est vrai, vous êtes connecté, sinon vous n'êtes pas connecté. Mais comme Nicolas note ci-dessous, l'exception ci-dessus est de Setex, il ne sera donc pas attrapé à moins que vous ne le mettriez dans le bloc d'essais.


@HALUK REDIS CONNECTION La méthode jette une exception.


3 Réponses :


4
votes

Votre exception a été envoyée de Setex, qui est en dehors du bloc Essay {}. Placez la SETEX à l'intérieur du bloc d'essai et l'exception sera prise.


2 commentaires

Je pense qu'il s'attend à attirer une exception concernant le service qui n'est pas disponible, avec celui d'une commande mal formée.


@Niloct, vous avez lu mon esprit: D En effet, il serait bien que si une exception puisse être prise en appelant en appelant Connect ().



2
votes

Comme le dit Nicolas, l'exception vient de Setex, mais vous pouvez éviter cela (et même le bloc Type / Catch) à l'aide de la commande ping : xxx


1 commentaires

Merci pour votre réponse, mais je ne vois pas pourquoi utiliser une commande supplémentaire (Ping dans votre réponse) est meilleur que de rechercher simplement le résultat de Connect (), ce que j'utilise réellement dans mon code.



0
votes

Il permettra d'attraper une exception de connexion si vous attrapez '\ prédis \ Connection \ ConnectException'.

ou vous pouvez utiliser \ Exception au lieu d'une exception (remarquez la barre oblique avant).


1 commentaires

Ceci est une erreur. L'exception que vous mentionnez, \ prédis \ Connection \ connaceException est lancé par le Predis Client < / a>, pas Phpredis .