System.runtime.Caching La scadenza assoluta sfratta i dati come previsto, ma come implementare una strategia di dati in scadenza non evicante?

StackOverflow https://stackoverflow.com/questions/9476775

Domanda

Sto usando System.runtime.Caching MemoryCache nella mia applicazione MVC3 per la cache raramente cambiata, ma spesso accede ai dati. Ho impostato una violazione assoluta di 30 minuti. Funziona alla grande. Ogni 30 minuti, l'applicazione scade i dati nella cache, quindi sfratta i dati.

La prossima volta che i dati vengono interrogati, il sistema ricarica la cache dal database.

Tuttavia, cosa succede se il database non era temporaneamente non disponibile dopo che la cache è stata sfrattata? Ciò comporterebbe alcun record disponibile né da MemoryCache né dal database. Sarebbe l'ideale scadere la cache, ma non sfrattare i dati fino a quando non ero sicuro di poterlo ricaricarlo. Se non riesco a ricaricare i dati dal database, vorrei estendere la scadenza della cache per dire ... 5 minuti circa e farti riprovare. Alla fine il database tornerà.

La strategia è che preferirei avere dati leggermente stantii che nessun dato.

La mia domanda è come dovrei creare una tale strategia di memorizzazione nella cache usando System.runtime.Caching. Non vedo un evento che mi permetta di prevenire lo sfratto al momento della scadenza. Qualche idea?

È stato utile?

Soluzione

Penso che tu debba implementare il tuo outputcacheProvider, che ti permetterà di controllare esattamente cosa succede quando è il momento di rimuovere l'elemento dalla cache:

http://msdn.microsoft.com/en-us/library/system.web.caching.outputcacheprovider.aspx

Potresti anche considerare le mutevoli strategie e guardare la dipendenza da SQLCacheDedipendence, che non credo invaliderà l'elemento memorizzata nella cache se il database non è disponibile.

http://msdn.microsoft.com/en-us/library/system.web.caching.sqlcachedependency.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top