Zum Inhalt

Redis als PHP Session Handler

Mit PHP 7 gab es schon einen gewaltigen Performance Schub nach oben. Die Laufzeit ist bei meinem Projekten mit PHP 7.0 im Gegensatz zu PHP 5.6 drei mal schneller. Um den ganzen noch einen kleinen Schub nach oben zu geben, habe ich mit Redis rum experimentiert. Um genau zu sein, mit dem Session save_handler von PHP. Dem Session Handler kann nützlicherweise eine andere Speicherroutine zugewiesen werden.

Im Standard ist der PHP Save Handler auf files eingestellt. PHP Sessions werden so in PHP interne Session Dateien gespeichert. Da eine Session in der Regel nur einen Schlüssel und Wert (key, value) abspeichern muss, eignet sich eine NoSQL Datenbanksystem wie Redis am besten dafür. Memcached, Memcache und SQLite können alternativ auch als Session Handler eingesetzt werden.

>> WordPress Redis Cachig Tutorial <<

PHP Redis installieren

Für die Umstellung auf den Redis Handler ist im Grund genommen nur eine kleine Konfiguration an der PHP.ini notwendig. Zuerst muss aber Redis selbst installiert werden:

$ sudo apt-get install redis-server

Lief die Installation erfolgreich, so könnt ihr mit dem Konsolen Befehl $ redis-cli PING testen ob der Redis Service läuft. Im Normalfall erhaltet ihr von Redis die Antwort PONG.

Im nächsten Schritt installieren wir PHP Redis:

$ sudo apt-get install php-redis

Damit steht für PHP der Redis Treiber zur Verfügung.

Session Handler auf Redis umstellen

Nachdem installieren von Redis und den PHP Treiber geht es an die Session Handler Umstellung. In der Regel ist hierfür nur eine kleine Änderung an der php.ini zuständig. Diese liegt unter PHP 7 mit FPM und Nginx unter „/etc/php/7.1/fpm/php.ini“.

In der php.ini befindet sich zum einen die Option „session.save_handler“ und „session.save_path“. Der session.save_handler muss auf redis geändert werden, der session.save_path gibt die Verbindung an. Als Verbindung wird „tcp://127.0.0.1:6379“ (<Server IP>:<Redis Port>) eingetragen. Wenn alles geklappt hat, sollten die beiden Zeilen so aussehen:

session.save_handler = redis
session.save_path    = "tcp://127.0.0.1:6379"

Wer nicht die ganze php.ini global umstellen möchte, kann den Session Handler auch lokal in seinem Projekt über ini_set() ändern:

ini_set('session.save_handler', 'redis');
ini_set('session.save_path',    'tcp://127.0.0.1:6379');

Zu guter Letzt müssen PHP und nginx bzw. apache2 neugestartet werden:

$ sudo service php7.0-fpm restart

$ sudo nginx -s reload

$ sudo service apache2 restart

Zum überprüfen des Session Handlers schauen wir noch einmal kurz in die PHP Info rein. Dazu wird auf dem Webserver eine Testdatei namens phpinfo.php erstellt. In dieser rufen wir phpinfo() auf:

<?php 
phpinfo();

Wenn alles richtig lief, steht im phpinfo() Session Abschnitt der session.save_handler auf redis:

PHP session.save_handler Reds
session.save_handler = Reds

Share This:

Published inOpen SourceTools und Tipps

3 Comments

  1. Vielen Dank für den Tipp, auch wenn er mich nur daran erinnerte, endlich mal den PHP-Session-Handler auf meinen bereits laufenden memcached zu leiten.

  2. Danke für diesen Beitrag. Das war für mich nützlich.

  3. benediktg benediktg

    Einen Ticken besser könnte es evtl. noch sein, wenn man Redis über einen Unixsocket laufen lässt. Ich habe da daher
    session.save_path = „unix:///run/redis/redis.sock“
    in der php.ini stehen. 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.