2015-10-02 6 views
9

Verwenden von PHPRedis und Apache PHP-FPM Ich verwende den Aufruf pconnect(), um Verbindungen wiederzuverwenden - in der Vergangenheit war es hilfreich, die Anzahl der Verbindungen nicht zu hoch werden zu lassen. In dem Fall, in dem unser primärer Redis-Knoten ausfällt, fördern wir automatisch den Slave zum Master und der alte Master wird schreibgeschützt. Das pconnect() hält jedoch immer noch eine Verbindung zur alten maste - so dass set() - Befehle fehlschlagen.Wie wird eine pconnect() - Verbindung geschlossen oder zurückgesetzt, wenn PHPRedis und PHP-FPM verwendet werden?

Was wir brauchen, ist eine Möglichkeit, diese persistenten Verbindungen abzubauen, ohne den Prozess zu beenden. Irgendwelche Ideen?

Antwort

10

Persistent Ströme von PHP Einbauten versehen sind, ist es ungeschriebenes Gesetz, dass alles, was einen Weg ausmacht, einen dauerhaften Strom zu schaffen, auch eine Möglichkeit bieten könnte, es zu zerstören.

PHP Redis bricht dieses Gesetz, es gibt einfach keine Möglichkeit für Sie, diesen persistenten Strom aus dem Benutzerland zu zerstören.

Die Vorgehensweise sollte PR eine Implementierung der erforderlichen Methode sein.

Hier ist ein Patch gegen die PHP7 Zweig, der Redis implementiert :: pclose: https://gist.github.com/krakjoe/326eadc61bea38fdd6e6

Beachten Sie, dass, wird der Code für pdisconnect aus der bestehenden Trenn basiert, die beide dieser Funktionen schauen mir fremd und sind nicht ehrlich über ihren Rückgabewert. Ich nehme an, es gibt irgendwo Tests oder Code, die sich auf diese Fremdheit stützen, also habe ich nicht versucht, sie zu reparieren.

Jede PR sollte erwähnen, dass diese Funktionen seltsam aussehen, und PHP7 ist die perfekte Zeit, um Dinge zu brechen.

2

Rufen Sie pconnect mit einem Timeout an? Angenommen, die Verbindung wird jedes Mal geschlossen, wenn das Zeitlimit überschritten wird, können Sie den Master erneut auflösen, bevor Sie pconnect erneut mit einer anderen Adresse anrufen.

Wenn Sie einen Redis Cluster ausgeführt werden, PHPRedis einen Cluster-Modus mit Timeout Verhalten hat, die für ‚VERSCHOBEN‘ Antwort mit Unterstützung für diese Einrichtung spezifisch ist: https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#timeout

Verwandte Themen