Я делаю свои первые шаги с Redis на Laravel, и я обнаружил кое-что странное.
При использовании Redis в качестве драйвера кеша в моей установке загрузка страницы занимает очень много времени.
Откуда я знаю?Если не использовать фасад Cache, а фасад Redis, то время отклика - это лишь малая доля.Я установил установку laravel на пустом месте и собрал миграцию и сеялку для простой модели Article.
Сначала я подумал, что элементы не были сохранены в redis, поскольку redis-cli не показывал их при поиске с помощью KEYS *,Я выяснил, что кеш хранится в другой БД с REDIS_CACHE_DB
, как указано в config / database.php. `INFO-пространство ключей в redis-cli перечисляет эти две БД с именами 0 и 1.
Я думал, что проблемаможет быть вызвано моей локальной установкой с Mamp Pro.Поэтому я переключился на коробку Laravel Homestead и загрузил туда свой проект.Тоже самое.
Вот код, который я использую: route / web.php
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\Cache;
use Illuminate\Http\Request;
use App\Article;
Route::get('/get-articles-mysql', function (Request $request) {
return response()->json(Article::take(20000)->get());
});
Route::get('/get-articles-cache', function (Request $request) {
return Cache::remember('posts', 60, function () {
return Article::take(20000)->get();
});
});
Route::get('/get-articles-redis', function (Request $request) {
if($posts = Redis::get('posts.all')) {
return response()->json(json_decode($posts));
}
$posts = Article::take(20000)->get();
Redis::set('posts.all', Article::take(20000)->get());
return response()->json($posts);
});
Я использую почтальон для получения времени ответа.Я сделал несколько запусков, поскольку маршруты кэширования должны быть медленными при первом запросе, когда кэширование пусто.Но в среднем я получаю следующее:
http://laravel-echo.local/get-articles-mysql 583ms
http://laravel-echo.local/get-articles-redis 62ms
http://laravel-echo.local/get-articles-cache 730ms
Я не понимаю этого. Использование фасада Redis напрямую очень быстрое.Но почему кэширование так медленно? Да, я дважды проверил свои .env файлы.Существует CACHE_DRIVER = redis, поэтому я не использую файловую систему случайно.И я использовал и php artisan config:clear
, и php artisan cache:clear
, чтобы избежать ошибок при отладке.
Я вижу ключ с именем "laravel_cache: posts" в redis-cli.Кэшированные посты там.Чтобы загрузить их нужно всего несколько лет.Я также проверил запросы в Chrome.Время отклика намного больше, но кэширование все же занимает больше, чем просто запрос mysql.
Так какие-нибудь предложения, что могло бы быть здесь?