J'utilise Redis
pour mettre en cache les requêtes/routes dans Laravel 5.2.
J'ai 3 environnements fonctionnant sur le même serveur Web, à savoir "production", "mise en scène" et "développement".
Pour chaque environnement, j'ai défini une valeur de cache prefix
différente pour me permettre de lier le cache à un environnement différent.
Dans le config/cache.php
fichier j'ai changé de ligne
'prefix' => 'laravel',
À
'prefix' => ENV('CACHE_PREFIX', 'laravel'),
Puis dans mon .env
fichier, j'ai ajouté le préfixe pour chaque environnement comme celui-ci
Pour Dev
CACHE_PREFIX="LaravelDev"
Pour la mise en scène
CACHE_PREFIX="LaravelStaging"
Pour la production
CACHE_PREFIX="LaravelProduction"
Je sais que je peux vider le cache de la ligne de commande comme ceci
php artisan cache:clear
Mais le code ci-dessus effacera le cache pour tous mes environnements.
Je veux seulement vider le cache pour "LaravelDev" seulement et laisser "LaravelStaging" et "LaravelProduction"
Comment puis-je vider le cache pour un environnement spécifique?
La commande cache:clear
Supprimera tout le cache associé à la connexion à la base de données.
Si vous souhaitez utiliser le même serveur Redis
avec plusieurs instances, vous pouvez utiliser une base de données Redis
différente pour chaque instance.
Dans le fichier .env
, Vous pouvez ajouter ce qui suit
Pour votre environnement de production
REDIS_DATABASE=0
Pour votre environnement de transfert
REDIS_DATABASE=1
Pour votre environnement de développement
REDIS_DATABASE=2
Puis dans config\database.php
Dans la section Redis
changez cette ligne 'database' => 0,
En 'database' => env('REDIS_DATABASE', 0),
Vous pouvez maintenant vider le cache pour n'importe lequel de vos environnements à l'aide de la commande suivante
php artisan cache:clear
Ce que fait la commande cache:clear
Artisan appelle la fonction flush
sur le connecteur actuel. Comme les moteurs de mise en cache varient en fonction des fonctionnalités, je ne pense pas qu'il soit possible d'expirer les clés de manière sélective en gardant le cache API universel. Des moteurs comme Redis offrent de telles fonctionnalités, mais pas Memcached par exemple.
Si vous utilisez Redis, vous pouvez modifier le connecteur par défaut pour utiliser les commandes 'SCAN/DEL' pour la méthode flush()
. Mais cela ne sera pas très efficace.
Si votre application utilise le vidage du cache correctement, cela ne devrait pas poser de problème car le cache se reconstruira automatiquement. Vous ne devez jamais vous attendre à ce que certaines données soient dans le cache car elles pourraient de toute façon expirer.