Какой лучший метод принудительного истечения срока действия кеша в ASP.NET?

Предположим, у меня есть приложение ASP.NET, работающее на нескольких веб-серверах за балансировщиком нагрузки:

Могу я:

  • Заставить кэш вывода (уровень страницы и / или управления) истечь глобально?

  • Принудительно истечь срок действия кеша данных (например, Cache.Insert)?

  • Мониторинг использования кэширования ASP.NET (ключи, оперативная память и т. Д.) Из центра?

Одним из возможных решений было бы при каждом использовании кеша проверять зависимость файлов на предмет изменений. Можно коснуться файла, что приведет к истечению срока действия всего кеша. Однако это требует, чтобы разработчики включали зависимость во весь свой код. Это лучшее решение?


person frankadelic    schedule 10.02.2009    source источник


Ответы (3)


Есть много способов сделать это кеширование устаревшим, например, кэш вывода страницы с помощью

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

Зависимость на основе времени просто истекает элемент в определенный момент времени.

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

Теперь, когда дело доходит до мониторинга кеша, прямого пути нет, если в кеше нет API, который сообщал бы вам.

Конечно, вы можете перечислить кеш, пары ключ-значение, а затем вычислить размер каждого сохраненного элемента. Звучит непросто, правда ??

Итак, вот, чтобы упростить мониторинг кеша. Честно говоря, я никогда не использовал его сам, но вы можете попробовать, просто добавьте dll в свое приложение.

А вот кое-что для просмотра ключей кеша,

' 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
person simplyharsh    schedule 10.02.2009
comment
Спасибо за ссылку на aspalliance cache manager. Это великолепно. - person frankadelic; 08.09.2009

Из Tek-Tips (подробное объяснение см. По ссылке)

Response.Expires = 15
Response.ExpiresAbsolute = Now() - 2
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "private"
person slf    schedule 09.03.2009

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);
person Bartłomiej Mucha    schedule 31.01.2013