缓存对比 在 Laravel 中直接从数据库查询

kyo*_*kyo 2 php mysql caching laravel laravel-5

直接从数据库查询

Route::get('/users', function() {
    $user = User::all();
    return $users; 
});
Run Code Online (Sandbox Code Playgroud)

缓存

Route::get('/users', function() {
    $users = User::all();
    Cache::put('users',$user,60);
    if(Cache::has('users')){
        return Cache::get('users');
    }
});
Run Code Online (Sandbox Code Playgroud)

结果

当页面加载时在浏览器中比较这两者,我根本没有注意到不同之处。

他们都返回了我数据库的用户列表

有什么工具/方法可以显示它们的性能吗?

cee*_*yoz 7

首先,这不是缓存:

Route::get('/users', function() {
    $users = User::all();
    Cache::put('users',$user,60);
    if(Cache::has('users')){
        return Cache::get('users');
    }
});
Run Code Online (Sandbox Code Playgroud)

您每次都在运行查询,然后每次都做额外的工作将其放入缓存中。你已经更换了:

database call
Run Code Online (Sandbox Code Playgroud)

和:

database call
save the results of the call to cache
ask if cache has the key we just saved
get key we just saved back from the cache
Run Code Online (Sandbox Code Playgroud)

你想做这样的事情:

Route::get('/users', function() {
    return Cache::remember('users', 60, function() {
        return User::all();
    });
});
Run Code Online (Sandbox Code Playgroud)

您可能不会注意到缓存在这样一个简单的查询上的巨大差异,尤其是在只有几个测试用户的未加载系统上。缓存对于繁重的数据库负载下的繁重查询(尤其是涉及连接/关系的内容)更为重要。