我正在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:clear
和php artisan cache:clear
来避免调试时出错。
我在redis-cli中看到一个名为“ laravel_cache:posts”的键。缓存的帖子在那里。加载它们只需要花很长时间。我还在Chrome中测试了请求。响应时间要长得多,但是缓存仍然比仅仅mysql查询花费更多。
那么,这里有什么建议吗?
答案 0 :(得分:0)
我知道这个线程已经很老了,但是我仍然得到这个线程。
我正在使用Laragon进行本地开发,而Redis使我的API请求速度降低了4倍。
编辑:
OMFG ...我就是问题所在。
在我的.env文件中,我有“ REDIS_HOST = localhost”,这正是问题所在。
将其更改为“ REDIS_HOST = 127.0.0.1”后,一切运行很快。
尝试一下,让我知道。