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');
}
});
在页面加载时在浏览器中比较这两者,我根本没有注意到它们的不同。
他们都返回了我的数据库用户列表
是否有工具/方式来显示效果?
答案 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