Laravel Caching с Redis очень медленный - PullRequest
0 голосов
/ 28 октября 2018

Я делаю свои первые шаги с 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.

Так какие-нибудь предложения, что могло бы быть здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...