8
votes

I´m making my first steps with Redis on Laravel and there is something odd I figured out.

When using Redis as a cache driver in my setup it is taking far way to much time to load a page.

How do I know? When not using the Cache facade but the Redis facade directly response times are just a fraction. I set up a laravel installation on scratch and build a migration and seeder for a simple Article model.

First I thought the items were not stored in redis as redis-cli didn´t show them when searching with KEYS *. I figured out the cache is stored in another DB with REDIS_CACHE_DB as found in config/database.php `INFO keyspace in redis-cli lists those two DB´s named 0 and 1.

I thought the problem could be caused by my localhost setup with Mamp Pro. So I switched over to the Laravel Homestead box and uploaded my project there. Same here.

Here´s the code I´m using: routes/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);

});

I´m using postman to get the response times. I made several runs as the caching routes should be slow on the first request when caching is empty. But what I get on the average is this:

http://laravel-echo.local/get-articles-mysql 583ms
http://laravel-echo.local/get-articles-redis 62ms
http://laravel-echo.local/get-articles-cache 730ms

I´m not getting this. Using the Redis facade directly is super-fast. But why is caching so slow? Yes, I double checked my .env files. There is CACHE_DRIVER=redis so I´m not using file system by accident. And I used both php artisan config:clear and php artisan cache:clear to avoid mistakes when debugging.

I see a key called "laravel_cache:posts" in redis-cli. The cached posts are there. It only takes ages to load them. I also tested the requests in Chrome. The response times are much longer but still caching takes more than mere mysql querying.

So any suggestions what could be going on here?

1
I suspect this too. How? I used apcu once as caching driver, and Laravel Cache facade was like 7 times slower than using apcu_get() directly. I suppose the very strict patterns and coding specifications Laravel uses are responsible. I think when it come to speed you have to break some rules, just like they broke them for databases till they create NoSql ones, and filesystem also. Today I tried Redis caching on my Mac and wasn't so impressed. I guest I will try it with Redis directly.KeitelDOG
Facing the same issue...laravel caching with redis seems slowakash varlani
Same here with Laravel 6.12Sliq

1 Answers

0
votes

I know this thread is already very old, but I am still getting the same.

I am using Laragon for local development and Redis makes my API request 4x slower.

EDIT:

OMFG... I just the problem.

In my .env file I had "REDIS_HOST=localhost" and that is exactly the problem.

After I change it to "REDIS_HOST=127.0.0.1", everything is running fast.

Try it and let me know.