У меня есть приложение Laravel , в которое я интегрирую Redis Server для обработки кэширования приложения. Однако у меня возникают проблемы с конфигурацией Redis, поскольку я не могу получить доступ к интерфейсу Redis с помощью фасада кэша Laravel .
Я установил redis-сервер и подтвердил, что он работает на сервере:
> redis-cli
127.0.0.1:6379 > ping
PONG
Затем я следовал документации по интеграции для Redis / Laravel отсюда:
https://laravel.com/docs/5.7/redis
Я установил пакет predis / predis для композитора ...
Я настроил его в Laravel для использования конфигурации Redis по умолчанию:
приложение / Config / cache.php:
'default' => env('CACHE_DRIVER', 'redis'),
приложение / 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 через Redis Facade ...
использовать Освещение \ Поддержка \ Фасады \ Redis;
... но не с Кэша Фасад .
использовать Освещение \ Поддержка \ Фасады \ Кэш;
// ************* 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>
Интересно, что Cache Facade по-прежнему функционирует нормально. Если я отслеживаю запросы кеша в Telescope , то 4 примера кеша в примере, которые не отображаются на Redis Server , все еще где-то кэшируются и используют фасад Cache для извлечения эти 4 значения отлично работают.
... все они возвращают правильные значения:
Cache::get('testFromCacheStoreRedisPut');
Cache::get('testFromCachePut');
Cache::get('testFromCacheRemember');
Cache::get('testFromCacheRememberForever');
Так что здесь происходит?
Похоже, что Laravel правильно использует драйвер кэша [redis], потому что, когда я выключаю Redis Server и повторно тестирую приложение, все приложения выдают Исключение подключения Predis :
В строке AbstractConnection.php 155: соединение отклонено [tcp: //127.0.0.1: 6379]
Где хранятся ключи кеша и почему я не могу просмотреть сохраненные ключи в терминале, используя "redis-cli"?
redis-cli KEYS '*'
Наблюдение за 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
, показанных на мониторе сервера, не приводит к получению каких-либо данных напрямую.