Redis & PHP: Tutorial – Website-Performance erhöhen

28. November 2013 · Kategorien: Internet, PHP, Webentwicklung

Redis PHP

Redis ist ein so genannter Key-Value-Speicher, der sehr bequem mit PHP dank einer PHP Extension genutzt werden kann. Wie Du Redis installierst und verwendest, erfährst Du in diesem Artikel.

Was ist Redis?

Redis ist wie gesagt ein Key-Value-Store, der im Arbeitsspeicher liegt. Key-Value-Store bedeutet, dass im Gegensatz zu Datenbanksystemen wie MySQL keine Datenbanken, Tabellen oder Spalten genutzt werden.
Stattdessen beschränkt man sich auf Schlüsselpaare. Das heißt, jedem Wert, den Du speichern möchtest, ordnest Du einen Namen zu. Unter diesem Namen speicherst Du den Wert dann in Redis.
Da das alles im Arbeitsspeicher stattfindet, ist das erneute Auslesen der Daten sehr schnell. Deswegen eignet sich Redis sehr gut als Cache. Allerdings musst Du beachten, dass bei einem Neustart des Systems sämtliche Daten verloren gehen. Es gibt zwar Möglichkeiten, den Inhalt von Redis persistent auf der Festplatte zu speichern, das soll aber nicht Teil dieses Tutorials sein.

Redis Installation

Zuerst ist es nötig, dass Du Redis selbst installierst. Das geht unter Mac OS X am besten mit Homebrew. Hast Du Homebrew einmal installiert, kannst Du mit folgendem Terminal-Befehl die Installation durchführen.

brew install redis

Genauso einfach geht das unter Linux mit folgendem Befehl:

apt-get install redis-server

Beziehungsweise unter Ubuntu:

sudo apt-get install redis-server

Sobald die Installation abgeschlossen ist, kannst Du den Server mit folgendem Befehl starten:

redis-server

Damit Du später Redis in PHP verwenden kannst, muss der Server immer im Hintergrund laufen. Wenn Du mit dem eben genannten Befehl den Server gestartet hast, kannst Du aber die Shell nicht mehr benutzen, weil das Programm ja logischerweise nicht mehr schließt. Deswegen beende den Server jetzt wieder mit STRG+C. Im folgendem Absatz erkläre ich Dir, wie Du Redis im Hintergrund startest.

Redis konfigurieren

Um Redis zu veranlassen, im Hintergrund zu starten, musst Du die Konfigurationsdatei öffnen. Wenn Du nicht weißt, wo die Konfigurationsdatei liegt, kannst Du nach ihr suchen.
Aktualisiere dazu zuvor den Suchcache Deines Betriebssystems.

Für Mac OS X lautet der Befehl folgendermaßen:

sudo /usr/libexec/locate.updatedb

Für Linux oder Ubuntu so:

sudo updatedb

Das dauert ein paar Sekunden.
Danach kannst Du – sowohl unter Linux und Ubuntu, also auch auf dem Mac – mit folgendem Befehl nach der Konfigurationsdatei suchen:

locate redis.conf

Sobald Du die Konfigurationsdatei gefunden hast, öffne sie mit einem Editor Deiner Wahl (z.B. vim oder nano) und suche nach folgenden Zeilen:

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /usr/local/var/run/redis.pid when da$
daemonize no

Die letzte Zeile im Beispiel muss folgendermaßen abgeändert werden:

daemonize yes

Starte nun den Server erneut mit Angabe der Konfigurationsdatei. Also redis-server Pfad/zur/redis.conf. In meinem Beispiel:

redis-server /usr/local/etc/redis.conf

Und siehe da – nichts passiert! Das ist gut, denn das bedeutet, dass sich Redis erfolgreich im Hintergrund gestartet hat. Wenn Du auf Nummer sicher gehen möchtest, kann Du Dir mit dem Befehl ps aux sämtliche aktiven Prozesse Deines Systems auflisten lassen. Irgendwo dazwischen sollte sich Redis befinden.

Redis PHP Extension Installation

Es gibt mehrere PHP-Erweiterungen, die Dir den Umgang mit Redis über PHP ermöglichen. Ich empfehle Dir Predis, da es noch aktiv weiterentwickelt wird und in der Liste auf der offiziellen Homepage an erster Stelle steht.

Die empfohlene Installation läuft über Composer. Wenn Du noch keine Erfahrung mit Composer hast, kannst Du Dir auch einfach eine Zip-Datei herunterladen:

Predis Download

Wenn Du das Archiv entpackt hast, findest Du dort einen Ordner “lib”. Darin befindet sich ein weiterer Ordner “Predis”. Kopiere diesen in dein Projektverzeichnis.

Redis in PHP benutzen

Im folgenden lese ich einen Wert beim ersten Aufruf aus der Datenbank aus und speichere ihn in Redis. Bei allen folgenden Aufrufen lese ich den Wert lediglich aus Redis.

<?php
require_once('Predis/AutoLoader.php');

// Automatisches Laden von Klassen, die Predis benötigt, ermöglichen
Predis\Autoloader::register();

// Predis-Instanz erzeugen, über die Du Werte speichern und auslesen kannst
$predis = new Predis\Client();

// Wert aus dem Key-Value-Store auslesen
$value = $predis->get('key');

// Wenn der Wert bisher noch nicht gespeichert wurde...
if(!$value)
{
  // ... dann lies ihn aus der Datenbank aus und speichere ihn im Key-Value-Store
  $value = ... Datenbankabfrage, für die es sich lohnt, zu cachen ... ;
  $predis->set('key', $value);
}

echo $value;

Das war es auch schon. Wenn Du Fragen hast, kannst Du diese gerne als Kommentar stellen. Wenn Du mehr über Redis erfahren möchtest, solltest Du Dir das Redis Cookbook für etwa 10 € besorgen. Der Autor geht auch noch mal zusätzlich darauf ein, wann es überhaupt Sinn macht, Redis zu verwenden.

Autor: | Kategorien: Internet, PHP, Webentwicklung

Keine Kommentare zu Redis & PHP: Tutorial – Website-Performance erhöhen

Hinterlasse eine Antwort

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