Leistung und Monitoring
Persistentes Redis für Queues, Sessions und Horizon
Redis Cache ist ein Cache: Nach jedem Neustart ist er leer, und wenn er voll ist, verwirft er Schlüssel. Er eignet sich für Daten, die die Anwendung neu berechnen kann, nicht für eine Warteschlange offener Jobs oder die Session eines Benutzers. Dafür gibt es das persistente Redis: eine eigene Instanz Ihres Kontos, die ihre Daten auf der Festplatte speichert und sie nicht verwirft, wenn sie voll ist.
Es handelt sich um Valkey 8, kompatibel mit Redis: Es funktionieren dieselben Befehle und dieselben Clients, etwa PhpRedis. Verfügbar ist es in den Tarifen Avanza, Max und Elastic.
Redis Cache oder persistentes Redis
| Redis Cache | Persistentes Redis |
|---|---|
| In allen Tarifen | In Avanza, Max und Elastic |
| Für Cache | Für Queues, Sessions und Horizon |
| 16 bis 200 MB, je nach Tarif | 64 bis 512 MB, nach Ihrer Wahl |
| Nach einem Neustart leer | Behält nach einem Neustart seine Daten |
| Verwirft Schlüssel, wenn voll | Lehnt Schreibvorgänge ab, wenn voll |
| Nicht in den Backups | In den täglichen Backups |
Redis Cache wird über /tmp/redis.sock verbunden, das persistente Redis über /home/USUARIO/.hostsuar/redis/redis.sock, mit Ihrem cPanel-Benutzer anstelle von USUARIO. Der Speicher von Redis Cache hängt vom Tarif ab; den des persistenten Redis wählen Sie selbst, bis 128 MB in Avanza, 256 MB in Max und 512 MB in Elastic.
Sie können beide gleichzeitig nutzen: den Cache in Redis Cache und Queues und Sessions im persistenten Redis. Wie das geht, erklären wir weiter unten.
In beiden Fällen ist der Port 0: Die Verbindung läuft über einen Socket, ohne Netzwerkzugriff. Die Anwendung muss im selben Hosting laufen.
Aktivieren
- Öffnen Sie im Kundenbereich Hosting, wählen Sie Ihren Dienst und gehen Sie zum Paketmanager.
- Klicken Sie auf der Karte Persistentes Redis auf Aktivieren.
- Prüfen Sie Speicher, Persistenz und das Verhalten bei vollem Speicher. Die Standardwerte passen für Queues, Sessions und Horizon.
- Bestätigen Sie und warten Sie, bis das Panel es als laufend anzeigt.
Das persistente Redis belegt einen der persistenten Prozesse des Tarifs und erscheint auch unter Tools > Prozesse. Jedes Konto hat eines; sind alle Prozesse Ihres Tarifs belegt, löschen Sie einen, bevor Sie es aktivieren.
Es läuft mit dem Benutzer Ihres Kontos und innerhalb seiner Ressourcen. Nur dieser Benutzer kann den Socket öffnen, daher ist kein Passwort nötig.
Einstellungen
Speicher. Standardmäßig 64 MB, maximal 128 MB in Avanza, 256 MB in Max und 512 MB in Elastic. Queues und Sessions brauchen wenig: 64 MB reichen für die meisten Anwendungen. Mit Horizon wächst der Speicher mit den Metriken und den letzten Jobs, die es aufbewahrt; das stellen Sie unter trim in config/horizon.php ein.
Persistenz.
- Jede Sekunde (Standard): schreibt jede Änderung in eine Protokolldatei (AOF) und überträgt sie jede Sekunde auf die Festplatte. Bei einem Ausfall geht höchstens die letzte Sekunde verloren. Das brauchen Queues und Sessions.
- Keine Persistenz: Alles liegt im Arbeitsspeicher, nach einem Neustart ist es leer. Nur verwenden, wenn Sie Daten speichern, die Sie neu erzeugen können.
Was auf der Festplatte gespeichert wird, liegt in ~/.hostsuar/redis/datos und zählt zum Speicherplatz Ihres Tarifs, auch wenn Redis gestoppt ist. Die Karte im Paketmanager zeigt neben dem Arbeitsspeicher, wie viel es belegt. Queues und Sessions bleiben meist bei wenigen Megabyte: Die Protokolldatei wird automatisch verdichtet, wenn sie wächst.
Wenn voll.
- Keine Daten verlieren (Standard): Ist das Limit erreicht, werden neue Schreibvorgänge mit einem Fehler abgelehnt und nichts wird gelöscht. Das ist die Option für Queues, Sessions und Horizon: Die Anwendung meldet den Fehler, statt unbemerkt einen Job zu verlieren.
- Am wenigsten Genutztes verwerfen: löscht die am wenigsten genutzten Schlüssel, um Platz zu schaffen. Nur für Cache; bei Queues oder Sessions würden Sie Jobs verlieren und Benutzer abmelden.
Eine Änderung der Einstellungen startet Redis neu. Mit Jede Sekunde stellt es seine Daten danach wieder her; wechseln Sie zu Keine Persistenz, startet es leer.
Aktionen
- Einstellungen: ändert Speicher, Persistenz und Verhalten bei vollem Speicher.
- Neu starten: stoppt und startet es. Mit Persistenz bleiben die Daten erhalten.
- Leeren: löscht alles, was es enthält, in allen Datenbanken: offene Jobs der Queues, aktive Sessions (die Benutzer müssen sich erneut anmelden) und Horizon-Metriken. Das lässt sich nicht rückgängig machen.
- Deaktivieren: stoppt und entfernt es und gibt damit seinen Platz als persistenter Prozess frei. Die Anwendung verliert die Verbindung: Ändern Sie vorher ihre
.env. Die gespeicherten Daten bleiben in Ihrem Konto, falls Sie es wieder aktivieren, es sei denn, Sie markieren Auch die gespeicherten Daten löschen.
Per SSH können Sie prüfen, ob es antwortet, mit Ihrem Benutzer anstelle von USUARIO:
valkey-cli -s /home/USUARIO/.hostsuar/redis/redis.sock ping valkey-cli -s /home/USUARIO/.hostsuar/redis/redis.sock info memory
Der erste Befehl antwortet mit PONG, der zweite zeigt den belegten Speicher (used_memory_human) und das Limit (maxmemory_human).
Aus Laravel verbinden
Aktivieren Sie die Erweiterung redis (PhpRedis) in der PHP-Version der Anwendung und, falls Ihre Worker eine andere Version nutzen, auch in dieser. Danach in der .env:
REDIS_CLIENT=phpredis REDIS_HOST=/home/USUARIO/.hostsuar/redis/redis.sock REDIS_PORT=0 REDIS_PASSWORD=null QUEUE_CONNECTION=redis SESSION_DRIVER=redis
Ersetzen Sie USUARIO durch Ihren cPanel-Benutzer. Mit Deploy+ bearbeiten Sie die .env im Menü des Repositorys; wenn Sie die Konfiguration cachen, führen Sie php artisan config:cache erneut aus oder deployen Sie noch einmal. Prüfen Sie die Verbindung:
php artisan tinker --execute="dump(Illuminate\Support\Facades\Redis::connection()->ping());"
Die Ausgabe muss true sein.
Bevor Sie die Verbindung wechseln, beachten Sie, was bereits vorhanden ist:
- Queues: Jobs, die in der Datenbank warten, wandern nicht zu Redis. Lassen Sie die Datenbank-Queue leerlaufen, bevor Sie
QUEUE_CONNECTIONändern, oder lassen Sie eine Weile einen Worker auf der Verbindungdatabaselaufen. - Sessions: In der Datenbank gespeicherte Sessions werden nicht übernommen. Wenn Sie
SESSION_DRIVERändern, müssen sich die Benutzer neu anmelden.
Um die Queues abzuarbeiten, muss ein Worker laufen: Legen Sie ihn unter Tools > Prozesse als Queue-Worker an oder verwenden Sie Horizon. Mehr dazu unter persistente Prozesse.
Zusammen mit Redis Cache
Wenn der Cache in Redis Cache und der Rest im persistenten Redis liegen soll, lassen Sie die Verbindung cache in config/database.php eigene Variablen lesen. Ändern Sie in der Verbindung cache Host und Port:
'host' => env('REDIS_CACHE_HOST', env('REDIS_HOST', '127.0.0.1')), 'port' => env('REDIS_CACHE_PORT', env('REDIS_PORT', '6379')),
Und in der .env:
REDIS_HOST=/home/USUARIO/.hostsuar/redis/redis.sock REDIS_PORT=0 REDIS_CACHE_HOST=/tmp/redis.sock REDIS_CACHE_PORT=0 CACHE_STORE=redis
Der Store redis in config/cache.php nutzt die Verbindung cache für die Daten und default für die Sperren. Die Sperren von Cache::lock() und withoutOverlapping() liegen also im persistenten Redis, das sie nicht verwirft.
Haben Sie nur das persistente Redis, lassen Sie den Cache in der Datenbank oder geben Sie, wenn Sie ihn in Redis legen, allem Gespeicherten ein Ablaufdatum: Mit Keine Daten verlieren füllt ein Cache, der ohne Ablauf wächst, irgendwann den Speicher und blockiert auch die Queues.
Horizon
Horizon braucht Queues in Redis und einen Prozess, der es am Laufen hält:
- Aktivieren Sie das persistente Redis und verbinden Sie Laravel wie im vorigen Abschnitt, mit
QUEUE_CONNECTION=redis. - Installieren Sie Horizon in Ihrem Projekt mit
composer require laravel/horizonundphp artisan horizon:install. Es braucht die Erweiterungenpcntlundposix: Meldet Composer, dass sie fehlen, aktivieren Sie sie in der PHP-Version, die Sie verwenden. - Prüfen Sie
config/horizon.php. Der Supervisor fürproductionerlaubt standardmäßig bis zu 10 Worker, und jeder belegt Speicher innerhalb der Ressourcen Ihres Kontos: Stellen SiemaxProcessesauf das ein, was Ihre Anwendung braucht, zum Beispiel 2 oder 3 in Avanza. - Legen Sie in der Methode
gate()vonapp/Providers/HorizonServiceProvider.phpfest, wer das Panel/horizonsehen darf. Außerhalb der lokalen Umgebung kommt nur hinein, wen Sie dort zulassen. - Fügen Sie unter Tools > Prozesse einen Prozess vom Typ Horizon mit dem Ordner der Anwendung und ihrer PHP-Version hinzu. Legen Sie nicht zusätzlich einen Queue-Worker für dieselben Queues an.
- Wenn Sie mit Deploy+ veröffentlichen, fügen Sie dem Skript nichts hinzu: Nach dem Aktivieren jeder Version, und auch bei der Rückkehr zu einer früheren, startet es den Horizon-Prozess dieser Anwendung neu. Das Skript läuft vor dem Aktivieren der Version, ein
horizon:terminatevon dort würde Horizon also auf der alten Version neu starten lassen. Veröffentlichen Sie auf andere Weise, führen Siephp artisan horizon:terminateaus, sobald der neue Code an seinem Platz ist. - Wenn Sie die Metrik-Diagramme möchten, planen Sie
horizon:snapshotalle fünf Minuten inroutes/console.php:
use Illuminate\Support\Facades\Schedule; Schedule::command('horizon:snapshot')->everyFiveMinutes();
Horizon mit Redis Cache ist nicht sicher: Wird dieser Cache geleert oder läuft er voll, gehen offene Jobs verloren.
Backups
Die Daten liegen in Ihrem Konto unter ~/.hostsuar/redis/ und sind wie Ihre übrigen Dateien in den täglichen Backups enthalten.
Wenn Sie diesen Ordner wiederherstellen, kehrt Redis zum Stand jenes Tages zurück: Jobs, die damals offen waren, kämen wieder in die Queue, auch wenn sie danach bereits verarbeitet wurden. Müssen Sie ihn wiederherstellen, stoppen Sie vorher das persistente Redis unter Tools > Prozesse und starten Sie es nach Abschluss der Wiederherstellung wieder.
Das könnte Ihnen auch helfen
- LiteSpeed Cache in Laravel integrieren Integrieren Sie den Cache des LiteSpeed-Servers über Composer in Laravel und wenden Sie die Middlewa...
- Was der Objekt-Cache ist und wie Sie ihn in WordPress einrichten Erklärt den Objekt-Cache von WordPress, wann er etwas bringt und wie Sie ihn mit Redis persistent ma...
- AccelerateWP: Funktionen, Verfügbarkeit und Konfiguration Beschreibt die kostenlosen und Premium-Funktionen von AccelerateWP für WordPress, darunter Cache, Da...
- Cloudflare: CDN, Sicherheit und DNS für Ihre Website einrichten Erklärt, wie Cloudflare zwischen Besuchern und Hosting arbeitet und CDN, Cache, Filter und eingespar...
Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.