Formation PUB030 : Laravel, 2019 La façade Cache de Laravel

Tester si Memcached fonctionne correctement


Si vous tentez de travailler avec Memcached dans votre application Laravel et que ça ne rend pas votre application plus rapide, la cause peut être de deux natures :

▼Publicité Le texte se poursuit plus bas

J'ai adapté un extrait de code trouvé sur StackOverflow (https://stackoverflow.com/questions/1463670/how-to-check-if-memcache-or-memcached-is-installed-for-php) pour tester l'installation de Memcached.

Il ne travaille pas avec les mécanismes de cache de Laraval et c'est volontaire. Le but est de vérifier la disponibilité de l'extension en faisant abstraction de la couche Laravel donc il utilise les fonctions PHP natives pour Memcached.

Ajoutez cette fonction dans un contrôleur de votre application et associez-le à une route. Un message vous indiquera s'il y a un problème au niveau de l'installation, de l'activation du service, de l'instanciation, etc.

PHP

/**
 * Test pour voir si Memcached est installé et activé.
 * @author Christiane Lagacé <https://christianelagace.com>
 * Inspiré de : https://stackoverflow.com/questions/1463670/how-to-check-if-memcache-or-memcached-is-installed-for-php
 *
 * @return void
 */

public function testMemcached()
{
    $message = "";
    $arreter = false;
    $cle = 'data';
    $urlMemcached = '127.0.0.1';
    $portMemcached = 11211;
    $donneesLocales = "données de test";

 

    try {
        if ( ! extension_loaded( 'Memcached' ) ) {
            $message .= 'L\'extension Memcached n\'est pas chargée. Est-elle installée sur le serveur?<br />';
        } else {
            if ( ! class_exists( 'Memcached' ) ) {
                $message .= 'La classe Memcached n\'existe pas.<br />';
            } else {
                $memcached = new \Memcached();
                if ( ! $memcached ) {
                    $message .= 'Impossible de créer un objet Memcached.<br />';
                } else {
                    if ( ! $memcached->addServer( $urlMemcached, $portMemcached ) ) {
                        $message .= "Impossible de se connecter à Memcached ($urlMemcached - port $portMemcached).<br />";
                    } else {
                        $version = $memcached->getVersion();
                        if (! $version) {
                            $message .= "Impossible de retrouver la version de Memcached. Le service est-il activé?<br />";
                        } else {
                            $version = implode( ',', $version );
                            $message .= "Test de Memcached version $version.<br />";

                            $donneesMisesEnCache = $memcached->get( $cle );
                            if ( ! $donneesMisesEnCache ) {
                                if ( ! $memcached->set( $cle, $donneesLocales, 0 ) ) {
                                    $message .= 'Memcached n\'a pas pu mettre les informations en cache. Le service est-il activé?<br />';
                                    $arreter = true;
                                }
                            }

                            if ( ! $arreter ) {
                                $donneesMisesEnCache = $memcached->get( $cle );
                                if ( ! $donneesMisesEnCache ) {
                                    $message .= 'Memcached n\'a pas pu retrouver les informations en cache.<br />';
                                    $arreter = true;
                                }

                                if ( ! $arreter ) {
                                    if ( $donneesMisesEnCache !== $donneesLocales ) {
                                        $message .= 'Les informations retrouvées par Memcached sont inexactes.<br />';
                                        $arreter = true;
                                    }

                                    if ( ! $arreter ) {
                                        $message .= 'Memcached fonctionne correctement!<br />';
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } catch ( \Throwable $e ) {
        \Log::error( 'Erreur inattendue dans le test de Memcached : ', [ $e ] );
        $message .= $e->getMessage() . '<br />';
    }

    echo $message;
}

 

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Dernière révision le 1 mai 2021
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre