Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the best method for forcing cache expiration in ASP.NET?

Suppose I have an ASP.NET application running across several web servers behind a load balancer:

Can I:

  • Force OutputCache (Page and/or Control level) to expire globally?

  • Force Data Cache (i.e. Cache.Insert) to expire?

  • Monitor ASP.NET caching usage (keys, RAM, etc) from a central location?

One possible solution would be to have every usage of cache check a file dependency for changes. The file could be touched which would expire all cache. However, this requires developers to include the dependency in all their code. Is their a better solution?

like image 972
frankadelic Avatar asked Feb 10 '09 19:02

frankadelic


People also ask

How to expire my cache in ASP net?

To set output-cache expirations for a page programmatically In the page's code, set the expiration policy for the page on the Cache property of the Response object. If you set expirations for a page programmatically, you must set the Cache-Control header for the cached page as well.

What is absolute cache expiration?

Absolute expiration can be specified on items that are required for a limited time in the cache. For example, a company announces flash sale for 24 hours on certain products. These items can then be cached with an absolute expiration of 24 hours so they are expired from the cache as soon as the sale ends.


1 Answers

There are many ways to make these caching expire, like page outputcache by

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)

Time-based dependency simply expires the item at a defined point in time.

Response.Cache.SetExpires(DateTime.Now.AddSeconds(360));
Response.Cache.SetCacheability(HttpCacheability.Private)
Response.Cache.SetSlidingExpiration(true);

Now when it comes to monitoring cache, unless there is an API on the cache to tell you, then there is no direct way.

You could of course enumerate the cache,key-value pairs and then calculate the size of each item stored. Doesnt sound easy right??

So here's to make your cache monitoring easy. Frankly saying i never used it myself, but you can give it a try, just the matter of adding a dll to your application.

And here's something for your cache keys view,

' display contents of the ASP.NET Cache
If Cache.Count > 0 Then    
  cc.Append("<b>Contents of the ASP.NET Cache (" _    
          & Cache.Count.ToString() & " items):</b><br />")    
  For Each item As Object In Cache    
    cc.Append("Key:'" & item.Key & "' Type:" _    
            & item.Value.GetType().ToString() & "<br />")    
  Next    
Else    
  cc.Append("<b>ASP.NET Cache is empty</b>")    
End If
like image 140
simplyharsh Avatar answered Sep 30 '22 00:09

simplyharsh