Comment Predis implémente la méthode pconnect de PHPredis

不言
Libérer: 2023-03-24 20:02:01
original
2232 Les gens l'ont consulté

Cet article présente principalement comment predis implémente la méthode pconnect de phpredis. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer


Predis et phpredis sont tous deux des clients PHP de redis. Vous pouvez lire les différences ici et n'entrerons pas dans les détails ici.

phpredis est une extension PHP, écrite en langage C. Elle est née plus tôt et de nombreux PHPers la connaissent.

Predis est écrit en langage PHP En raison de la popularité de composer ces dernières années et de la prise en charge de composer par de nombreux frameworks, predis stocké dans la bibliothèque composer a également été largement utilisé.

pconnect() est une méthode dans phpredis. Elle est différente de connect() Pour plus de détails, vous pouvez lire cet article. Pour résumer, la connexion une fois la méthode pconnect établie n'est pas fermée à la fin de. la demande, mais dépend du processus php-fpm, le processus php-fpm ne meurt pas, redis connect existera toujours jusqu'à ce que le délai d'inactivité se déconnecte automatiquement.

C'est-à-dire qu'une connexion persistante est établie, ce qui convient à PHP demandant Redis sous une concurrence élevée.

Mais predis n'a pas de méthode pconnect(), comment implémenter des fonctions similaires ?

Le projet utilise le framework Laravel, mais les paramètres de configuration pertinents ne se trouvent pas dans la documentation. Je n'ai donc pu lire que le code source du plug-in, et j'ai finalement trouvé une méthode pour me connecter à redis dans la classe
: /src/Connection/StreamConnection.php

    /**
     * Initializes a TCP stream resource.
     *
     * @param ParametersInterface $parameters Initialization parameters for the connection.
     *
     * @return resource
     */
    protected function tcpStreamInitializer(ParametersInterface $parameters)
    {
        if (!filter_var($parameters->host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {            
        $address = "tcp://$parameters->host:$parameters->port";
        } else {            
        $address = "tcp://[$parameters->host]:$parameters->port";
        }        
        $flags = STREAM_CLIENT_CONNECT;        
        if (isset($parameters->async_connect) && $parameters->async_connect) {            
        $flags |= STREAM_CLIENT_ASYNC_CONNECT;
        }        
        if (isset($parameters->persistent)) {            
        if (false !== $persistent = filter_var($parameters->persistent, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE))
         {                
        $flags |= STREAM_CLIENT_PERSISTENT;                
        if ($persistent === null) {                    
        $address = "{$address}/{$parameters->persistent}";
                }
            }
        }        $resource = $this->createStreamSocket($parameters, $address, $flags);        
        return $resource;
    }
Copier après la connexion
À la ligne 19 de

nous pouvons voir un paramètre inconnu $parameters->persistent, traduit par « durable ». persistentDonc, tant que lorsque vous utilisez predis pour vous connecter à redis, ajoutez le paramètre persistent et attribuez-le à true ou 1, vous pouvez implémenter pconnect() de phpredis, ce qui est simple et pratique.

Ce qui suit est un e-mail pour prouver qu'il n'y a aucun malentendu sur le code source :

Can the predis support the function pconnect() which in php-redis?
Yes, just add in the connection parameters persistent=1 (when using URI strings) or persistent => true (when using a named array).
Copier après la connexion
Comment êtes-vous entré dans cette fosse ? Ou à cause de la documentation du framework, de nombreux frameworks PHP prennent actuellement en charge Composer, comme Laravel, Yii, CI, etc., mais il n'y a aucune garantie que la documentation sera mise à jour à temps, en particulier la documentation chinoise, vous avez donc toujours besoin de la capacité pour lire le code source.

En fait, vous pouvez voir beaucoup de choses dans le code ci-dessus :

  1. predis utilise TCP pour se connecter à redis, et la fonction principale utilisée est

    ( Predis dispose également d'une méthode HTTP pour se connecter à Redis, principalement en utilisant curl, qui n'est pas inclus dans cette classe). stream_socket_client

  2. predis ne dépend pas de phpredis. De nombreux environnements de projet installent phpredis et predis dans le framework, pensant que ce dernier dépend du premier, ce qui est faux.

  3. Dans la ligne 16 du code ci-dessus, vous pouvez également voir un autre paramètre async_connect, qui est utilisé pour la connexion asynchrone. Il est également très important, mais il n'est pas introduit dans de nombreux documents.


Source :

https://blog.csdn.net/u013474436/article/details/53131662

Recommandations associées :

Installation de l'extension php-redis (phpredis)


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal