Ladezeit verringern mit Laravel – Teil 2: Redis

Nachdem wir uns um die Basics der Ladezeitverbesserung im letzten Artikel bereits gekümmert haben steigen wir nun etwas tiefer ein. Caching ist ein wichtiger Bestandteil des Webs und auch Laravel verwendet natürlich Caching an diversen Stellen. Doch um hier den Performancevorteil noch zu erhöhen sollten wir vom Standardcache – nämlich dem dateibasierten – zu einem In-Memory Cache wie beispielsweise Redis wechseln. Wie das geht sehen wir uns nun Schritt für Schritt an.

Was ist Caching?

Die Aufgabe, die meist die größte Performance frisst, ist das Verarbeiten von Daten hin zu einem bestimmten Ergebnis. Stellen wir uns einfach vor, jemand stellt uns die Aufgabe, die Wurzel von 2 bis auf die 100. Nachkommastelle genau zu berechnen. Soweit kein Problem – aber wenn nun jemand anderes das Ergebnis ebenfalls wissen will müssten wir neu Berechnen – und diese Berechnung kostet Zeit. Viel einfacher wäre es doch, das Ergebnis einfach aufzuschreiben und der anderen Person das fertige Ergebnis auszuhändigen.

Das wäre dann ein Cache. Wir berechnen etwas einmalig und speichern das Ergebnis ab, sodass wir beim nächsten Mal direkt Zugriff darauf ohne die Berechnung haben. Und genau so funktioniert es auch in der Webprogrammierung. Wenn wir beispielsweise eine aufwendige Datenbankabfrage haben, die wir regelmäßig durchführen müssen, deren Ergebnis sich aber selten ändert (Statistiken zum Beispiel, die vielleicht nur einmal pro Tag aktualisiert werden müssen) so ist es doch viel klüger, diese Datenbankabfrage nur dann wirklich durchzuführen, wenn wir kein Ergebnis haben. Das heißt wir führen sie beim ersten Mal durch, speichern das Ergebnis in einem Cache und für den Rest des aktuellen Tages nehmen wir einfach dieses Ergebnis direkt aus dem Cache ohne die Datenbank damit zu belasten, die sicherlich besseres zu tun hat.

 

Warum Redis?

Was ist Redis und warum sollten wir es verwenden? Redis ist ein sogenannter In-Memory-Cache, ähnlich wie Memcache. Um den Unterschied zwischen einem In-Memory-Cache und anderen zu verstehen müssen wir uns zuerst klar machen, dass es zwei Arten von Speicher in einem Computer gibt: die Festplatte und den Arbeitsspeicher.

Die Festplatte ist dabei dafür zuständig, Daten dauerhaft zu speichern – also auch wenn der Computer gar nicht an ist (beziehungsweise nicht mal am Strom hängt). Wäre ja auch furchtbar, wenn die letzten Urlaubsbilder bei jedem Computerneustart plötzlich weg wären. Das ist natürlich ein großer Vorteil, bringt aber dafür den Nachteil mit sich, dass Schreiben und Lesen bei der Festplatte etwas länger dauern.

Der Arbeitsspeicher ist für die Geschwindigkeit da – Lesen und Schreiben ist hier enorm schnell, dafür werden Daten aber nicht persistent gespeichert. Das heißt sobald der Computer neu gestartet wird (oder das Programm, welches Daten im Arbeitsspeicher ablegt) sind die Daten weg. Das ist aber für unsere Caches kein Problem, denn die Daten die wir hier ablegen sind ja einfach nur das Ergebnis anderer Berechnungen. Da wir die Grunddaten (also zum Beispiel den Inhalt der Datenbank) auf der Festplatte speichern sparen wir mit dieser Weise einfach nur Rechen- und damit Ladezeit.

 

 

Redis unter Ubuntu 14.04 installieren

Bevor wir Redis mit Laravel verwenden können müssen wir es natürlich erstmal installieren. Glücklicherweise ist das unter Ubuntu 14.04 gar kein Problem. Als erstes können wir den Paketmanager apt-get updaten mit dem Befehl

Dadurch stellen wir sicher, dass die aktuellste Software installiert wird. Danach installieren wir Redis einfach mit dem Befehl

Und schon läuft unser Redis Server. Mit dem Befehl

können wir überprüfen ob alles in Ordnung ist. Standardmäßig verwendet Redis den Port 6379, das wird noch für die Laravel Konfiguration wichtig.

 

Laravel mit Redis verwenden

Damit Laravel auch unser frisch installiertes Redis verwenden kann müssen wir das natürlich noch konfigurieren. Hier gibt es mehrere Stellen im Code wo wir Einstellungen vornehmen können.

Redis Einstellungen

Die Einstellungen für Redis (zum Beispiel auf welchem Port der Server läuft oder auch ob ein Passwort verwendet wird) finden wir in der Datei config/database.php. Unter dem Punkt redis können wir hier beliebig viele Server angeben – standardmäßig gibt es einen default Server, der die automatischen Einstellungen von Redis enthält. Der Name den wir angeben kann dann später an verschiedenen Stellen benutzt werden, um diesen Server zu verwenden.

 

 

Redis als Cache Server verwenden

Nachdem wir Laravel gezeigt haben, wie es sich zu unserem Redis Server verbinden kann müssen wir nun noch einstellen, wo dieser verwendet werden soll. Ganz im Thema des Artikels öffnen wir dafür die Datei config/cache.php wo wir unter dem Punkt stores die Einstellung redis finden. Dort können wir nun unter connection den Namen des Servers angeben, den wir im vorherigen Teil angelegt haben. Standardmäßig ist das default korrekt.

Trotzdem verwendet Laravel normalerweise den Filecache (das heißt, die Daten werden in Dateien auf der Festplatte abgelegt). Um das anzupassen öffnen wir noch die Datei .env und schauen ob es die Option CACHE_DRIVER gibt. Falls ja stellen wir sicher, dass diese den Wert redis bekommt, falls es die Option nicht gibt legen wir sie einfach mit CACHE_DRIVER=redis an.

Diese Option legt den Standardcache fest, das heißt Laravel verwendet ab diesem Moment standardmäßig unseren Redis Server für alle Caches was schon einen Boost für die Ladezeit bedeuten dürfte.

 

 

Mit diesen Änderungen sind wir wieder einen Schritt weiter auf unserem Weg zur performanten Website. Unser Laravel benutzt nun automatisch Redis als Cacheserver und greift dadurch schon wesentlich seltener auf die Festplatte zu. Natürlich müssen wir auch bei der Programmierung darauf achten, solche Flaschenhälse in der Ladezeit zu identifizieren und auszumerzen. Aber darum kümmern wir uns in späteren Artikeln dieser Serie noch.
Hast du noch weitere Tipps wie man Laravel mit Hilfe von Redis verschnellern kann? Wir freuen uns, wenn du sie mit uns in den Kommentaren teilst.

Schreibe einen Kommentar

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

*