php - Laravel 缓存与 Redis 非常慢

标签 php laravel caching laravel-5 redis

我正在 Laravel 上使用 Redis 迈出第一步,我发现了一些奇怪的东西。

在我的设置中使用 Redis 作为缓存驱动程序时,加载页面需要很长时间。

我怎么知道?当不使用 Cache 门面而直接使用 Redis 门面时,响应时间只是一小部分。我从头开始安装 laravel 并为简单的文章模型构建迁移和播种器。

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

我认为问题可能是由我使用 Mamp Pro 设置的本地主机引起的。所以我切换到 Laravel Homestead box 并将我的项目上传到那里。同样在这里。

这是我正在使用的代码:
路线/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);

});

我正在使用 postman 来获取响应时间。我做了几次运行,因为当缓存为空时,第一个请求的缓存路由应该很慢。但我得到的平均结果是:
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 查询需要更多的时间。

那么这里有什么建议吗?

最佳答案

我知道这个线程已经很老了,但我还是一样。

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

编辑:

OMFG...我只是问题。

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

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

试试吧,让我知道。

关于php - Laravel 缓存与 Redis 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53030544/

相关文章:

php - 仅生产中的 Google App Engine 302 状态任务队列

php - 如果抛出异常,Laravel 数据库事务会发生什么?

php - Laravel 发送电子邮件时出现问题

如果上游启动,则 Nginx 绕过缓存,如果关闭则使用缓存

php - 为什么在 PDO 中使用 bindParam 而不用 array()?

php - 如何在 CakePHP 3 中使用 postGIS

php ssh2_exec 不执行 'su' 命令

java - 如何更改 JCS cache.ccf 文件的路径?

caching - 类似于标签缓存并查询它以建议他们使用 Redis

php - 任何可嵌入的文档查看器