2016-07-07 16 views
5

Ich verwende Redis, um Abfragen/Routen in Laravel 5.2 zwischenzuspeichern.Wie kann ich den Cache in Laravel über die Befehlszeile löschen?

Ich habe 3 Umgebungen auf dem gleichen Webserver laufen, d. H. "Produktion", "Staging" und "Entwicklung."

Für jede Umgebung legte ich einen anderen Cache prefix Wert, um den Cache auf andere Umgebung zu verknüpfen.

In der config/cache.php Datei ich die Zeile geändert

'prefix' => 'laravel', 

Um

'prefix' => ENV('CACHE_PREFIX', 'laravel'), 

Dann in meiner .env Datei, habe ich das Präfix für jede Umgebung wie dieser

Für Dev

CACHE_PREFIX="LaravelDev" 

Für

CACHE_PREFIX="LaravelStaging" 

Für Produktion

CACHE_PREFIX="LaravelProduction" 

Staging Ich weiß, dass ich, wie dieser den Cache von der Kommandozeile löschen kann

php artisan cache:clear 

Aber der obige Code wird für alle den Cache löschen meiner Umgebungen.

ich nur den Cache für „LaravelDev“ nur löschen wollen und allein „LaravelStaging“ und „LaravelProduction“ verlassen

Wie kann ich den Cache für eine bestimmte Umgebung zu löschen?

Antwort

10

cache:clear Befehl entfernt den gesamten Cache, der mit der Verbindung zur Datenbank verbunden ist. Wenn Sie denselben Redis Server mit mehreren Instanzen verwenden möchten, können Sie für jede Instanz eine andere Redis Datenbank verwenden.

In der .env Datei können Sie die folgende

für Ihre Produktionsumgebung

REDIS_DATABASE=0 

Für Ihre Staging-Umgebung

REDIS_DATABASE=1 

Für Ihre Entwicklungsumgebung hinzufügen

REDIS_DATABASE=2 

Dann in config\database.php im Redis Abschnitt Änderung dieser Linie 'database' => 0, zu 'database' => env('REDIS_DATABASE', 0),

Jetzt

php artisan cache:clear 
+1

Brilliant! Vielen Dank – Jaylen

+0

^co-sign that! –

0

Was der cache:clear Handwerker Befehl tut Anrufe flush Funktion auf aktuellen Stecker. Da Caching-Engines mit der Funktionalität variieren, glaube ich nicht, dass es möglich ist, Schlüssel ablaufen zu lassen, wodurch die Cache-API allgemeingültig bleibt. Engines wie Redis bietet solche Funktionalität, aber Memcached zum Beispiel nicht.

Wenn Sie Redis verwenden, können Sie den Standardkonnektor für die Verwendung von "SCAN/DEL" -Befehlen für die Methode flush() ändern. Trotzdem wird das nicht sehr effektiv sein.

Wenn Ihre Anwendung Cachespeicher korrekt verwendet, sollte es keine Probleme verursachen, da der Cache sich neu aufbauen wird. Sie sollten nie erwarten, dass sich einige Daten im Cache befinden, da sie ohnehin ablaufen können.

+0

den folgenden Befehl verwenden Sie Cache für jede Ihrer Umgebungen löschen kann, wenn ich die PHP-Handwerker-Cache ausführen: klar, löscht alles in Redis. Ich habe es gerade noch einmal getestet. Das Problem, das ich sehe, ist, dass die Benutzer, die die App verwenden, einen Fehler beim Übereinstimmungs-Token erhalten, da die Sitzung ebenfalls gelöscht wird. – Jaylen

+0

Die Lösung besteht darin, unterschiedliche Speicherarten für Sitzungen in Ihren Staging- und Entwicklungsumgebungen zu verwenden. Daher wirkt sich das Leeren des Cache nicht auf aktive Benutzer aus. –

+0

Kann ich keine Befehlszeile erstellen, die den folgenden Code ausführt? $ redis = Cache :: getRedis(); $ keys = $ redis-> keys (Cache :: getPrefix(). "*"); foreach ($ Schlüssel als $ Schlüssel) { Cache :: vergessen ($ Schlüssel); } – Jaylen