Heim  >  Artikel  >  Backend-Entwicklung  >  Wie predis die pconnect-Methode von phpredis implementiert

Wie predis die pconnect-Methode von phpredis implementiert

不言
不言Original
2018-04-26 09:47:362210Durchsuche

Dieser Artikel stellt hauptsächlich vor, wie predis die pconnect-Methode von phpredis implementiert. Jetzt kann ich ihn mit Ihnen teilen.


Predis und phpredis sind beide PHP-Clients von Redis. Sie können den Unterschied hier lesen und werden hier nicht näher darauf eingehen.

phpredis ist eine PHP-Erweiterung, die in der Sprache C geschrieben wurde. Sie wurde früher geboren und viele PHPer sind damit vertraut.
Predis ist in der Sprache PHP geschrieben. Aufgrund der Beliebtheit von Composer in den letzten Jahren und der Unterstützung von Composer durch viele Frameworks wurde auch Predis, das in der Composer-Bibliothek gespeichert ist, häufig verwendet.

pconnect() ist eine Methode in phpredis. Weitere Informationen finden Sie in diesem Artikel. Zusammenfassend lässt sich sagen, dass die Verbindung nach dem Herstellen der pconnect-Methode nicht geschlossen wird Die Anforderung hängt jedoch vom PHP-FPM-Prozess ab. Der PHP-FPM-Prozess stirbt nicht ab. Die Redis-Verbindung bleibt immer bestehen, bis die Verbindung aufgrund des Leerlauf-Timeouts automatisch getrennt wird. Das heißt, es wird eine dauerhafte Verbindung hergestellt, die für PHP geeignet ist, Redis bei hoher Parallelität anzufordern.

Predis verfügt jedoch nicht über eine pconnect()-Methode. Wie implementiert man ähnliche Funktionen?
Das Projekt verwendet das Laravel-Framework, die relevanten Konfigurationsparameter sind jedoch nicht in der Dokumentation zu finden. Ich konnte also nur den Plug-in-Quellcode lesen und fand schließlich eine Methode zum Herstellen einer Verbindung zu Redis in der Klasse /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;
    }

In Zeile 19 von $parameters->persistent sehen wir einen unbekannten Parameter persistent , übersetzt als „dauerhaft“. Solange Sie also bei Verwendung von Predis zum Herstellen einer Verbindung zu Redis den Parameter persistent hinzufügen und ihm true oder 1 zuweisen, können Sie pconnect () von phpredis implementieren, was einfach und bequem ist.

Das Folgende ist eine E-Mail, um zu beweisen, dass kein Missverständnis des Quellcodes vorliegt:

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).

Wie sind Sie in diese Grube geraten? Aufgrund der Framework-Dokumente unterstützen derzeit viele PHP-Frameworks Composer wie Laravel, Yii, CI usw. Es gibt jedoch keine Garantie dafür, dass die Dokumente, insbesondere chinesische Dokumente, rechtzeitig aktualisiert werden. Sie benötigen daher weiterhin die Möglichkeit dazu Lesen Sie den Quellcode.

Tatsächlich können Sie dem obigen Code viel entnehmen:

  1. Predis verwendet TCP, um eine Verbindung zu Redis herzustellen, und die verwendete Hauptfunktion ist stream_socket_client ( Predis verfügt auch über eine http-Methode zum Herstellen einer Verbindung zu Redis, hauptsächlich mithilfe von Curl, das nicht in dieser Klasse enthalten ist.

  2. predis ist nicht von phpredis abhängig. Viele Projektumgebungen installieren phpredis und predis im Framework und denken, dass letzteres von ersterem abhängt, was falsch ist.

  3. In Zeile 16 des obigen Codes sehen Sie auch einen weiteren Parameter async_connect, der für die asynchrone Verbindung verwendet wird. Er ist ebenfalls sehr wichtig, wird jedoch in vielen Dokumenten nicht eingeführt.


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

Verwandte Empfehlungen:

Installation der PHP-Redis-Erweiterung (phpredis)


Das obige ist der detaillierte Inhalt vonWie predis die pconnect-Methode von phpredis implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP-Array-SummenoperationNächster Artikel:PHP-Array-Summenoperation