Redis & PHP: Tutorial – Website-Performance erhöhen
28. November 2013 · Kategorien: Internet, PHP, Webentwicklung

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:
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: Christian Kilb | Kategorien: Internet, PHP, Webentwicklung
Hinterlasse eine Antwort