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

时间:2016-02-03 14:32:04

标签: php mysql laravel caching laravel-5

直接从数据库查询

Route::get('/users', function() {
    $user = User::all();
    return $users; 
});

缓存

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

结果

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

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

是否有工具/方式来显示效果

3 个答案:

答案 0 :(得分:3)

对于初学者来说,不是缓存

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

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

database call

使用:

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

你想做这样的事情:

Route::get('/users', function() {
    return Cache::remember('users', 60, function() {
        return User::all();
    });
});

在这样一个简单的查询中,您可能没有注意到缓存的巨大差异,尤其是在只有少数测试用户的卸载系统上。在繁重的数据库负载下,缓存对于繁重的查询(特别是涉及连接/关系的东西)来说更为重要。

答案 1 :(得分:1)

您可以在代码部分的开头和结尾使用microtime()进行快速基准测试。

$start = microtime();
// code
$end = microtime();
// Log $end - $start here

但是这些类型的查询对于缓存来说并不值得,因为select所有查询都非常快。在进行复杂的数据库计算时,缓存项目更有价值。

此外,在您的第二个示例中,您仍然通过执行Users:all来访问数据库,您需要在访问数据库之前返回缓存的值。

答案 2 :(得分:1)

在谈论浏览器性能时,您可以查看优化查询。现在,您只需返回User模型上的所有可查看字段。如果您指定所需的字段,整体性能将随着查询的优化而增加。

在这方面,根据应用程序的大小和交通状态,您很可能永远不会在生产中使用all方法。

只是一些想法:D