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
コマンドを実行しても、データは直接フェッチされません。
コメントで述べたように、デフォルトを正しく設定することは、ストアを明示的に定義するよりも優れたソリューションです
ストアを指定する必要があります:
Cache::store('redis')->put('bar', 'baz', 600); // 10 Minutes
シンプルなソリューション!
config\database.php
UPDATEで、default
とcache
の値を1
で更新します
'redis' => [
'default' => [
// Other settings...
'database' => env('REDIS_DB', 1),
],
'cache' => [
// Other settings...
'database' => env('REDIS_CACHE_DB', 1),
],
],