web-dev-qa-db-ja.com

Laravel 5アプリケーションでのキャッシュインターフェースとしてのRedisの設定

LaravelアプリケーションをRedisサーバーに統合していますアプリケーションのキャッシングを処理します。ただし、RedisインターフェースにLaravelを使用してアクセスできないため、Redis構成に問題がありますキャッシュファサード。

私はredis-serverをセットアップし、それがサーバーで動作していることを確認しました:

> redis-cli
127.0.0.1:6379 > ping
PONG

次に、ここからRedis/Laravelの統合ドキュメントに従いました https://laravel.com/docs/5.7/redis

composer predis/predisパッケージをインストールしました...
Laravelに設定して、デフォルトのredis設定を使用します:

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

テストすると、Redis Facadeを介してRedisにアクセスできます。 。

illuminate\Support\Facades\Redisを使用します。

...Cache Facadeからではありません。

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>キー '*'
1)「testFromRedisSet」
127.0.0.1:6379>


興味深いことに、キャッシュファサードはまだ適切に機能しているように見えます。 Telescopeでキャッシュリクエストを監視すると、に表示されない例の4つのキャッシュリクエストRedisサーバーはまだどこかにキャッシュされており、これらの4つの値を取得するためにキャッシュファサードを使用すると正常に機能します。

...これらすべてが正しい値を取得します。

Cache::get('testFromCacheStoreRedisPut');
Cache::get('testFromCachePut');
Cache::get('testFromCacheRemember');
Cache::get('testFromCacheRememberForever');

それで、ここで何が起こっているのですか

Laravelが[redis]キャッシュドライバーを正しく利用しているため、Redisサーバーをシャットダウンすると、アプリ全体を再テストして、アプリケーション全体がPredis接続例外をスローします:

AbstractConnection.phpの155行目:接続が拒否されました[tcp://127.0.0.1:6379]

保存されているキャッシュキーはどこにあり、なぜ「redis-cli」を使用してターミナルに保存されたキーを表示できないのですか?

redis-cliキー '*'

Redis Serverを監視すると、Redisがデータを格納し、イベント通知をプッシュしていることがわかりますが、端末に表示されないすべてのデータにはlaravel_cacheが前に付いています。ただし、その名前のデータまたはハッシュキーはインターフェイスに存在しません。

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"

laravel_cache名前空間に格納されているデータにアクセスするにはどうすればよいですか?サーバーモニターに表示される同じGETコマンドを実行しても、データは直接フェッチされません。

6
McWayWeb

コメントで述べたように、デフォルトを正しく設定することは、ストアを明示的に定義するよりも優れたソリューションです

ストアを指定する必要があります:

Cache::store('redis')->put('bar', 'baz', 600); // 10 Minutes

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

0
Angad Dubey

シンプルなソリューション!

config\database.php UPDATEで、defaultcacheの値を1で更新します

'redis' => [

    'default' => [

         // Other settings...

        'database' => env('REDIS_DB', 1),
    ],

    'cache' => [

         // Other settings...

        'database' => env('REDIS_CACHE_DB', 1),
    ],

],
0
Hardik Raval