2016-05-27 7 views
1

Ich habe eine öffentliche static/singleton-Klasse mit IsDataModified(), die durch Änderung in Datenbank, Datei, Art des Benutzers, API, usw., Prozesse, nur betroffen ist Gibt eine Bool-Variable zurück.Gibt es eine Alternative zu ASP.NET MVC OutputCache ohne gleitende Ablauf

Die Häufigkeit der Änderung der Ausgabedaten variiert extrem von einer Minute bis zu Monaten, daher werde ich kein gleitendes Ablaufdatum verwenden, stattdessen sollte die Dauer MAX oder unendlich sein.

Aber was ich suche ist

  1. Liste item
  2. Antrag Browser
  3. MVC-Filter zu überprüfen, ob Cache fehlt oder IsDataModified()
    1. Cache aktualisieren und zurück
    2. Sonst zurück vorhandenen Cache

Ich habe versucht, OutputCache zu erweitern und die Dauer auf eine sehr große Zahl zu setzen, aber sobald die Seite zwischengespeichert ist, werden die Filter nicht ausgelöst.

Grundsätzlich möchte ich nicht, dass die angegebene Dauer der ausschlaggebende Faktor dafür ist, wann der Cache abläuft, vielmehr sollte IsDataModified() der entscheidende Faktor sein.

Ein Ansatz, den ich denke, ist es, einen einfachen Filter zu erstellen und Ausgabe-Cache oder ähnliches Objekt durch Code dahinter zu verwenden, aber OutputCacheAttribute konnte ich nicht finden.

Ist das möglich? Bitte vorschlagen.

+0

Ganz spezifisch Server Seite Caching –

+2

Blick in Memcache –

+0

Memcache ist großartig, versuchen, ObjectCache, die meine Bedürfnisse ausreichen sollte, wenn ich nur Variable/nicht-primitiven Datentyp zum Filtern übergeben kann –

Antwort

0

Also habe ich eine Lösung auf Redis (Memcache ist viel chaotischer) implementiert. Ich benutze einen Open-Source-Redis-Output-Cache-Provider, der im Grunde einen Schlüssel erstellt, der der URL der Seite entspricht. Wenn die zugrunde liegenden Daten für eine der Seiten geändert werden, entferne ich den Wert von Redis, wo der Schlüssel ein Muster machiert. (Meine Datensortierung hat eine Hierarchie, daher lösche ich den Cache für weitere Elemente, wenn es sich um ein Datenelement aus dem übergeordneten Element handelt, das aktualisiert wird).

Einen ähnlichen Ansatz zum Löschen der zwischengespeicherten Seite zu verwenden, wenn die Daten aktualisiert werden, würde wahrscheinlich auch für Sie funktionieren. Nebenbei möchte ich meinen Prozess so ändern, dass ich einen Hintergrunddienst habe, der die Seite erstellt, wenn Daten aktualisiert werden, und den Cache ersetzt, sodass die ersten Benutzer nach dem ersten Aufruf der Seite keine langsame Antwort erhalten aus dem Cache entfernt.

Verwandte Themen