2009-02-17 7 views
8

Ich arbeite an einem ASP.NET MVC-Projekt und bin an den Punkt gekommen, an dem ich meine Caching-Strategie in Betracht ziehen möchte. Ich habe versucht, mein Framework so offen wie möglich für die Verwendung im Caching zu lassen.Caching-Strategie, Ausgabe-Cache vs Daten-Cache oder beides?

Von was ich während Scott Hanselmans Podcast gehört, verwendet StackOverflow.com Seitenausgabe-Caching und Zips, die Inhalt und legt sie in RAM. Das klingt, als ob dies für den benutzerübergreifenden Cache ideal wäre, aber für so etwas wie personalisierte Seiten müssten Sie eine Version für jeden Benutzer zwischenspeichern, die sehr schnell außer Kontrolle geraten könnte.

Also, für eine Cache-Strategie. Welches sollte verwendet werden, Output Caching, Data Caching oder kombiniert? Meine ersten Gedanken sind beide, aber soweit Cache-Abhängigkeiten es klingt, könnte es ein bisschen komplex werden.

Antwort

7

Seien Sie vorsichtig mit übermäßig aggressivem Caching. Obwohl Caching ein Werkzeug ist, um die Leistung zu verbessern, kann es bei falscher Verwendung die Leistung sogar verschlechtern.

Ich kann nicht beantworten, ob Ausgabe-Caching oder Daten-Caching für Sie besser funktionieren würde, ohne weitere Details zu Ihrem Projekt zu kennen. Ich kann helfen, ein paar Beispiele dafür zu geben, wann man einen anderen benutzt.

Wenn Sie einen bestimmten Datensatz haben, den Sie häufig in vielen verschiedenen Ansichten verwenden würden, wäre es besser, Datencaching zu verwenden. Sie würden dies verwenden, wenn Ihre Datenabrufoperation sehr häufig und teuer im Vergleich zu Ihrer Datenwiedergabe wäre. Wenn Sie mehrere Ansichten mit denselben Daten hätten, würden Sie Ihre Datenabrufzeit speichern.

Wenn Sie eine Ansicht hatten, die einen sehr spezifischen Datensatz verwendet und das Rendering der Ansicht kompliziert war und diese Ansicht sehr oft angefordert wurde (z. B. Homepage des Stack-Überlaufs), würden Sie viel vom Output-Caching profitieren .

Also, am Ende hängt es wirklich von Ihren Bedürfnissen ab und seien Sie vorsichtig bei der Verwendung von Caching falsch.

+0

Es ist im Grunde ein Digg-Klon. –

+0

In Kigg (http://www.codeplex.com/Kigg) finden Sie ein Beispiel für eine ASP.NET MVC-App, bei der es sich um einen Digg-Klon handelt. Wenn Ihre App genau wie ein Digg-Klon ist, dann würde ich Cache die Story-Seiten und die Homepage ausgeben. Je nachdem, wie Ihre Datenstrukturen aussehen, kann es erforderlich sein, die Benutzerinformationen zwischenzuspeichern. – ajma

8

Wir machen API- und Output-Caching in großem Umfang (3 Millionen Zugriffe pro Tag) Website (Nachrichtenportal). Die Seite wird hauptsächlich von anonymen Benutzern benutzt, aber wir haben authentifizierte Benutzer und wir speichern eine komplette Seite nur für sie, aufgrund von einigen personalisierten Teilen der Seite, und ich muss zugeben, dass wir absolut keine Probleme mit dem Speicherdruck hatten.

Also, mein Tipp wäre Cache alles, was Sie in API-Cache, so dass Ihre Ausgabe-Cache-Wiederaufbau noch schneller ist.

Achten Sie natürlich genau auf Ihre Cache-Verhältnis-Werte in den Leistungsindikatoren. Sie sollten Zahlen> 95% der zwischengespeicherten Treffer sehen.

Eine andere Sache zu beachten ist Cache-Invalidisierung, das ist ein großes Problem, wenn Sie viele verwandte Inhalte haben. Sie können beispielsweise Musikmaterial zwischenspeichern, und Informationen über ein Album oder einen Titel werden möglicherweise auf einigen hundert Seiten angezeigt und zwischengespeichert. Wenn sich irgendetwas in diesem Lied ändert, müssen Sie alle diese Seiten ungültig machen, was problematisch sein kann.

Fazit, Caching ist eine der besten Eigenschaften von ASP.NET, es ist hervorragend gemacht und Sie können sich darauf verlassen.

+4

Verwenden Sie eine Webfarm?Wenn ja, hat jeder Webserver einen eigenen Inproc-Cache, der unabhängig von anderen Webservern ist? – frankadelic

Verwandte Themen