Caching in asp.net-mvc

Je voudrais mettre en cache mes actions les plus lourdes de firebase database sur mon site asp.net-mvc. Dans mes recherches j’ai trouvé

  • donut caching sur le blog de Phil
  • Filtres de mise en cache / compression sur le blog de Kazi
  • Le podcast de Scott Hansleman sur leur mise en cache dans SO

Mais je ne le sens pas encore.
Je veux pouvoir mettre en cache ma requête POST en fonction de plusieurs parameters. Ces pars sont dans un object. Je voudrais donc mettre en cache le résultat de la requête suivante:

public ActionResult AdvancedSearch(SearchBag searchBag) 

Où searchBag est un object qui contient (un tas) de parameters de recherche facultatifs. Mes vues elles-mêmes sont légères (comme elles devraient l’être), mais l’access aux données peut prendre beaucoup de temps, en fonction des champs renseignés dans le sac de recherche.

J’ai l’impression que je devrais être en cache sur mon datalayer, plutôt que sur mes actions.
Comment puis-je utiliser VaryByParam dans l’atsortingbut OutputCache?

J’aime aussi mettre en cache le modèle ou la couche de données. Cela isole tout à voir avec la récupération des données du contrôleur / présentation. Vous pouvez accéder au cache ASP.NET à partir de System.Web.HttpContext.Current.Cache ou utiliser le bloc Caching Application depuis la bibliothèque d’entreprise. Créez votre clé pour les données mises en cache à partir des parameters de la requête. Veillez à invalider le cache lorsque vous mettez à jour les données.

Ou vous pouvez être indépendant du HttpContext.Current et accéder au cache depuis HttpRuntime.Cache 🙂

Souvent, OutputCaching peut être le plus rapide et le plus efficace, mais seulement quand il répond à vos besoins. Inutile d’avoir une efficacité rapide si ce n’est pas le cas! 😉

Dans ce cas, il semble que la mise en cache au niveau de la couche de données est correcte car vous avez des besoins de mise en cache complexes. Parfois, vous pouvez combiner les deux si le jeu de parameters contrôlant la sortie est mis en cache.

vous pouvez utiliser la mise en cache quelque chose comme ça

 [OutputCache(Duration = 10, VaryByParam = "empID")] public ActionResult GetEmployeeDetail(int empID) { Employee e = new Employee(); return Content(e.getEmployeeDetails(empID)); } 

ou vous pouvez utiliser des profils de cache mis en configuration web

        and use this tag [OutputCache(CacheProfile="Admin")]