【发布时间】:2015-05-31 04:53:08
【问题描述】:
PHP 同事:
这个问题与使用 Laravel 缓存的最佳实践有关。
中心目标是减少所有常用数据库的访问次数 性能相关的原因。该应用程序是一个阅读密集型新闻网站,最多可能有十几个控制器,主要是资源类型。
是否有任何记录在案的应用程序设计最佳实践?对我来说似乎很明显 因为 Cache:: 是一个单行语句,所以很容易将它放入控制器中—— 要么返回缓存的数据,要么调用模型并缓存结果。并使之无效 当请求更新模型时缓存(可能带有急切的重新加载)。但这是一个好习惯吗?
这是在控制器中执行此操作的初步介绍
/**
* Retrieve listing of the gallery resource.
*
* @uses GET /gallery to return all image_collections.
*
* @param int $id The gallery id
*
* @return Response - Contains a HTTP code and a list of articles.
*/
public function index()
{
$response_data = array();
$response_code = 200;
// TRY TO RETURN A CACHED RESPONSE
$cache_key = "gallery_index";
$response_data = Cache::get($cache_key, null);
// IF NO CACHED RESPONSE, QUERY THE DATABASE
if (!$response_data) {
try {
$response_data['items'] = $this->gallery->all();
Cache::put($cache_key, $response_data, Config::get('app.gallery_cache_minutes'));
} catch (PDOException $ex) {
$response_code = 500;
$response_data['error'] = ErrorReporter::raiseError($ex->getCode());
}
}
return Response::json($response_data, $response_code);
}
我听说你可以使用 Laravel 路由过滤器来缓存响应, 但我无法完全理解这个想法。
想法?参考?例子?
谢谢大家, 雷
【问题讨论】:
-
缓存管理很难,这完全取决于您要缓存的内容。如果您提供一个近似值,您可能不在乎基础数据是否有些过时,相反,如果您正在缓存 ALC 之类的东西,它可能总是需要正确(然后在基础数据存储更新时刷新) .
-
你应该在你的控制器中解耦你的逻辑,例如你可以将类型提示缓存传递给你的控制器构造函数,我还建议你为你的缓存创建存储库,这样你就可以利用 laravel 的缓存能力。