Ich möchte meine datenbankintensivsten Aktionen auf meiner asp.net-mvc-Site zwischenspeichern. In meiner Forschung habe ich gefunden
- Donut-Caching auf Phils Blog
- Filter zwischenspeichern / komprimieren in Kazis Blog
- Scott Hanslemans Podcast darüber, wie sie Dinge in SO zwischengespeichert haben.
Aber ich habe noch nicht das Gefühl, dass ich es verstehe.
Ich möchte meine POST-Anfrage abhängig von mehreren Pars zwischenspeichern können. Diese Pars befinden sich in einem Objekt. Daher möchte ich das Ergebnis der folgenden Anfrage zwischenspeichern:
public ActionResult AdvancedSearch(SearchBag searchBag)
Wobei searchBag ein Objekt ist, das (eine Reihe) optionaler Suchparameter enthält. Meine Ansichten selbst sind leicht (wie sie sein sollten), aber der Datenzugriff kann ziemlich zeitaufwändig sein, abhängig davon, welche Felder in der Suchtasche ausgefüllt sind.
Ich habe das Gefühl, ich sollte eher auf meiner Datenschicht als auf meinen Handlungen zwischenspeichern.
Wie soll ich VaryByParam im OutputCache-Attribut verwenden?
quelle
Antworten:
Ich mag es auch, im Modell oder in der Datenschicht zwischenzuspeichern. Dies isoliert alles, was mit dem Abrufen von Daten von der Steuerung / Präsentation zu tun hat. Sie können über die Unternehmensbibliothek auf den ASP.NET-Cache zugreifen
System.Web.HttpContext.Current.Cache
oder den Caching-Anwendungsblock verwenden. Erstellen Sie Ihren Schlüssel für die zwischengespeicherten Daten aus den Parametern für die Abfrage. Stellen Sie sicher, dass der Cache ungültig wird, wenn Sie die Daten aktualisieren.quelle
Oder Sie können unabhängig vom HttpContext.Current sein und über HttpRuntime.Cache auf den Cache zugreifen :)
quelle
OutputCaching ist häufig das schnellste und effizienteste, jedoch nur dann, wenn es Ihren Anforderungen entspricht. Es macht keinen Sinn, schnell effizient zu sein, wenn es falsch ist! ;)
In diesem Fall scheint das Caching auf der Datenebene korrekt zu sein, da Sie komplexe Caching-Anforderungen haben. Manchmal können Sie beide kombinieren, wenn der Parametersatz, der steuert, welche Ausgabe zwischengespeichert wird, einfach ist.
quelle
Sie können das Ausgabe-Caching wie folgt verwenden
oder Sie können Cache-Profile verwenden, die in der Webkonfiguration festgelegt wurden
quelle