PHP Collègues:Laravel Cache :: Meilleures pratiques
Cette question concerne les meilleures pratiques pour utiliser Laravel Cache.
L'objectif principal est de réduire le nombre d'accès à la base de données pour toutes les raisons liées aux performances habituelles. L'application est un site de nouvelles intensif en lecture avec peut-être une douzaine de contrôleurs au maximum, principalement des ressources.
Existe-t-il des meilleures pratiques documentées pour la conception de l'application? Il me semble évident que puisque Cache :: est une instruction d'une ligne, il est facile de la déposer dans les contrôleurs - soit retourner les données en cache ou appeler le modèle et mettre en cache les résultats. Et invalider le cache (peut-être avec un rechargement rapide) lorsque les requêtes mettent à jour le modèle. Mais est-ce une bonne pratique?
Voici un premier aperçu de le faire dans le contrôleur
/**
* 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);
}
J'ai entendu la suggestion que vous pouvez utiliser des filtres Laravel Route pour mettre en cache les réponses, mais je ne peux pas tout à fait obtenir ma tête l'idée.
Pensées? Les références? Exemples?
Merci à tous, Ray
La gestion du cache est difficile, tout dépend de ce que vous mettez en cache. Si vous présentez une valeur approximée, vous ne vous souciez pas si les données sous-jacentes sont obsolètes, inversement, si vous mettez en cache quelque chose comme les ALC, il peut toujours être correct (puis vidé lorsque le magasin de données sous-jacent est mis à jour) . – Matthew
Vous devriez découpler votre logique dans votre contrôleur, par exemple vous pouvez passer le cache d'indice de type à votre constructeur de contrôleur, je suggère également que vous créez des dépôts pour votre mise en cache, afin que vous puissiez tirer parti des capacités de cache. – Darick