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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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
Method 2
From Tek-Tips (read link for detailed explanation)
Response.Expires = 15 Response.ExpiresAbsolute = Now() - 2 Response.AddHeader "pragma","no-cache" Response.AddHeader "cache-control","private" Response.CacheControl = "private"
Method 3
http://msdn.microsoft.com/en-us/library/y18he7cw(v=vs.100).aspx
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true);
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0