web-dev-qa-db-fra.com

Configuration de Redis en tant qu'interface de cache dans une application Laravel 5

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.

6
McWayWeb

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

https://laravel.com/docs/5.8/cache#cache-usage

0
Angad Dubey

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),
    ],

],
0
Hardik Raval