J'ai une application Laravel dans laquelle j'intègre un serveur Redis dans gérer la mise en cache de l'application. Cependant, je rencontre des problèmes avec la configuration de Redis, car je ne suis pas en mesure d'accéder à l'interface Redis en utilisant le Laravel façade de cache.
J'ai mis en place un serveur redis et confirmé que cela fonctionne sur le serveur:
> redis-cli
127.0.0.1:6379 > ping
PONG
J'ai ensuite suivi la documentation d'intégration pour Redis/Laravel à partir d'ici: https://laravel.com/docs/5.7/redis
J'ai installé le composer package predis/predis ...
Je l'ai installé dans Laravel pour utiliser la configuration redis par défaut:
app/config/cache.php:
'default' => env('CACHE_DRIVER', 'redis'),
app/config/database.php:
'redis' => [
'client' => 'predis',
'default' => [
'Host' => env('REDIS_Host', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
],
'cache' => [
'Host' => env('REDIS_Host', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
],
]
. env:
BROADCAST_DRIVER=log
CACHE_DRIVER=redis
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_Host=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Maintenant, quand je teste, je peux accéder à Redis via la Redis Facade .. .
utilisez Illuminate\Support\Facades\Redis;
... mais pas de la façade du cache .
utilisez Illuminate\Support\Facades\Cache;
// ************* this works
Redis::set('testFromRedisSet', 'RedisSet');
// ************* none of these work...
Cache::store('redis')->put('testFromStoreCachePut', 'CacheStorePut', 600);
Cache::put('testFromCachePut', 'CachePut', 600);
Cache::remember('testFromCacheRemember', 60, function() {
return "CacheRemember";
});
Cache::rememberForever('testFromCacheRememberForever', function() {
return "CacheRememberForever";
});
127.0.0.1:6379> TOUCHES '*'
1) "testFromRedisSet"
127.0.0.1:6379>
Chose intéressante, la façade du cache semble toujours fonctionner correctement. Si je surveille les demandes de cache dans le télescope , les 4 demandes de cache de l'exemple qui n'apparaissent pas dans le Le serveur Redis est toujours en cache quelque part, et l'utilisation de la façade Cache pour récupérer ces 4 valeurs fonctionne correctement.
... tous ceux-ci récupèrent les valeurs correctes:
Cache::get('testFromCacheStoreRedisPut');
Cache::get('testFromCachePut');
Cache::get('testFromCacheRemember');
Cache::get('testFromCacheRememberForever');
Alors que se passe-t-il ici?
Il semble que Laravel utilise correctement le pilote de cache [redis], car lorsque j'arrête le serveur Redis et retester l'application que les applications entières lèvent une exception de connexion Predis :
Dans AbstractConnection.php, ligne 155: connexion refusée [tcp: //127.0.0.1: 6379]
Où sont stockées les clés de cache et pourquoi ne puis-je pas voir les clés stockées dans le terminal en utilisant "redis-cli"?
tOUCHES redis-cli '*'
Surveillance du Redis Server
me montre que Redis
stocke les données et envoie les notifications d'événements, mais toutes les données que je ne vois pas dans le terminal sont préfixées par laravel_cache
. Cependant, aucune donnée ou clé de hachage portant ce nom n'est présente dans l'interface.
1561596707.950397 [1 127.0.0.1:42058] "SETEX" "laravel_cache:testFromCacheStoreRedisPut" "36000" "s:18:\"CacheStoreRedisPut\";"
1561596707.950898 [1 127.0.0.1:42058] "SETEX" "laravel_cache:testFromCachePut" "36000" "s:8:\"CachePut\";"
1561596707.951521 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheRemember"
1561596707.952110 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheRememberForever"
1561596707.952718 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheStoreRedisPut"
1561596707.953236 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCachePut"
1561596707.953745 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheRemember"
1561596707.954191 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheRememberForever"
1561596709.251036 [0 127.0.0.1:42064] "SELECT" "1"
1561596709.251200 [1 127.0.0.1:42064] "GET" "laravel_cache:telescope:dump-watcher"
1561596709.263678 [1 127.0.0.1:42064] "GET" "laravel_cache:telescope:pause-recording"
Comment puis-je accéder aux données stockées dans le laravel_cache
espace de noms? Même l'exécution des mêmes commandes GET
affichées dans le moniteur du serveur ne récupère aucune donnée directement.
Comme mentionné dans les commentaires, la définition correcte de la valeur par défaut serait une meilleure solution que la définition explicite du magasin
Vous devez spécifier le magasin:
Cache::store('redis')->put('bar', 'baz', 600); // 10 Minutes
Solution simple!
Dans config\database.php
METTRE À JOUR la valeur de default
& cache
avec 1
'redis' => [
'default' => [
// Other settings...
'database' => env('REDIS_DB', 1),
],
'cache' => [
// Other settings...
'database' => env('REDIS_CACHE_DB', 1),
],
],