Laravel使用Redis缓存非常慢

时间:2018-10-28 10:35:11

标签: php laravel caching laravel-5 redis

我正在Redis的Laravel上迈出第一步,我发现有些奇怪的地方。

在我的设置中将Redis用作缓存驱动程序时,加载页面要花费很多时间。

我怎么知道?如果不使用Cache门面,而Redis门面直接响应时间只是零头。我从头开始安装laravel安装程序,并为简单的Article模型构建了迁移和种子。

首先,我认为这些项目未存储在redis中,因为使用KEYS *搜索时redis-cli并未显示它们。我发现缓存是使用config / database.php中的REDIS_CACHE_DB存储在另一个数据库中的 “ redis-cli中的INFO键空间列出了两个数据库0和1。

我认为问题可能是由我的Mamp Pro本地主机设置引起的。因此,我切换到Laravel Homestead框并在那里上传了我的项目。同样在这里。

这是我正在使用的代码: 路线/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:clearphp artisan cache:clear来避免调试时出错。

我在redis-cli中看到一个名为“ laravel_cache:posts”的键。缓存的帖子在那里。加载它们只需要花很长时间。我还在Chrome中测试了请求。响应时间要长得多,但是缓存仍然比仅仅mysql查询花费更多。

那么,这里有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我知道这个线程已经很老了,但是我仍然得到这个线程。

我正在使用Laragon进行本地开发,而Redis使我的API请求速度降低了4倍。

编辑:

OMFG ...我就是问题所在。

在我的.env文件中,我有“ REDIS_HOST = localhost”,这正是问题所在。

将其更改为“ REDIS_HOST = 127.0.0.1”后,一切运行很快。

尝试一下,让我知道。