2016-07-07 44 views
5

Sto usando Redis per memorizzare nella cache query/percorsi in Laravel 5.2.Come posso cancellare la cache in laravel usando la riga di comando?

Ho 3 ambienti in esecuzione sullo stesso server Web i.e "produzione", "staging" e "sviluppo".

Per ciascun ambiente, ho impostato un valore cache diverso prefix per consentirmi di collegare la cache a un ambiente diverso.

Nel file config/cache.php ho cambiato la linea di

'prefix' => 'laravel', 

Per

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

Poi nel mio file .env, ho aggiunto il prefisso per ogni ambiente come questo

Per Dev

CACHE_PREFIX="LaravelDev" 

per la gestione temporanea

CACHE_PREFIX="LaravelStaging" 

Per Produzione

CACHE_PREFIX="LaravelProduction" 

so di poter cancellare la cache dalla riga di comando come questo

php artisan cache:clear 

Ma il codice qui sopra cancellare la cache per tutti dei miei ambienti.

voglio solo per cancellare la cache per "LaravelDev" solo e lasciare solo "LaravelStaging" e "LaravelProduction"

Come posso cancellare la cache per un ambiente specifico?

risposta

10

cache:clear comando rimuoverà tutta la cache associata alla connessione al database.

Se si desidera utilizzare lo stesso server Redis con più istanze, è possibile utilizzare un diverso database Redis per ogni istanza.

Nel file .env è possibile aggiungere il seguente

Per il vostro ambiente di produzione

REDIS_DATABASE=0 

Per la vostra Staging Environment

REDIS_DATABASE=1 

per il proprio ambiente di sviluppo

REDIS_DATABASE=2 

Poi nel config\database.php nel cambiamento Redis sezione di questa linea 'database' => 0, a 'database' => env('REDIS_DATABASE', 0),

Ora è possibile cancellare la cache per le tue ambienti utilizzando il seguente comando

php artisan cache:clear 
+1

Brillante! Grazie mille – Jaylen

+0

^co-firm! –

0

Il comando artigiano cache:clear chiama la funzione flush sul connettore corrente. Poiché i motori di memorizzazione nella cache variano a seconda della funzionalità, non penso sia possibile espirare le chiavi in ​​modo selettivo mantenendo la cache API universale. I motori come Redis forniscono tale funzionalità, ma ad esempio memcached non lo fa.

Se si utilizza Redis, è possibile modificare il connettore predefinito per utilizzare i comandi "SCAN/DEL" per il metodo flush(). Tuttavia questo non sarà molto efficace.

Se l'applicazione utilizza la cache correttamente lo svuotamento, non dovrebbe causare problemi poiché la cache si ricostruirà da sola. Non dovresti mai aspettarti che alcuni dati siano nella cache poiché potrebbero comunque scadere.

+0

Quando eseguo la cache php artigianale: cancellarlo cancella tutto in Redis. L'ho appena testato di nuovo. Il problema che sto vedendo è che gli utenti che stanno usando l'app riceveranno l'errore di token di Mismatch perché anche la sessione viene cancellata. – Jaylen

+0

La soluzione consiste nell'utilizzare un tipo di archiviazione diverso per le sessioni negli ambienti di gestione temporanea e di sviluppo, pertanto la pulizia della cache non influirà sugli utenti attivi. –

+0

Non riesco a creare una riga di comando che eseguirà il seguente codice? $ redis = Cache :: getRedis(); $ keys = $ redis-> keys (Cache :: getPrefix(). "*"); foreach ($ chiavi come $ chiave) { Cache :: forget ($ key); } – Jaylen

Problemi correlati