ASP.Net Cache совместного использования - PullRequest
5 голосов
/ 21 июля 2010

У меня есть веб-приложение ASP.Net 4.0, которое очень часто загружает данные из базы данных и выполняет тяжелые вычисления на ней.Я хочу кэшировать эти загруженные и подготовленные данные в центральном кэше, к которому могут обращаться все пользователи и компьютеры, использующие приложение.

Простой вариант использования:

  • Доступ пользователя 1веб-страница, кэш пуст, данные загружены / рассчитаны, данные кэшированы
  • Пользователь 2 обращается к веб-странице, кэш содержит данные, данные загружены из кэша
  • Пользователь 3 обращается к веб-странице, кэш содержит данные, данныезагружено из кеша
  • Пользователь 1 перезагружает веб-страницу, кэш содержит данные, данные загружаются из кеша
  • Срок действия кэша истекает
  • Пользователь 3 обновляет веб-страницу, кеш пуст, данные загружаются / рассчитываются, данные кэшируются

Я знаю, что ASP.Net имеет встроенный механизм кэширования.Чего я не знаю, так это того, может ли он быть доступным для разных пользователей, одновременно получающих доступ к сайту на разных компьютерах.Я также хотел бы знать, как система ведет себя в среде веб-фермы.

Ответы [ 3 ]

9 голосов
/ 21 июля 2010

В то время как другие упоминали встроенный ASP.NET Cache (System.Web.Caching), обратите внимание, что .NET 4.0 представляет совершенно новую инфраструктуру кэширования, предназначенную для работы вне пространства имен System.Web.Caching:

System.Runtime.Caching

http://msdn.microsoft.com/en-us/library/system.runtime.caching(VS.100).aspx

Теперь, это гораздо больше зверя, чем простой элемент кэша System.Web.Caching. Но вы получаете преимущество, заключающееся в том, что у вас есть несколько хранилищ кэша, блокировка объектов / ключей кэша и возможности расширения для создания собственных поставщиков внешнего кэша, например, для новой распределенной системы кэширования Microsoft от Microsoft. Он поставляется со встроенным поставщиком MemoryCache.

Это действительно не так сложно использовать. Прямо из статьи MSDN о встроенном провайдере MemoryCache (опять же, вы можете реализовать свой собственный), используя его в приложении WinForms (вы измените код для своего веб-приложения):

http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

ObjectCache cache = MemoryCache.Default;
string fileContents = cache["filecontents"] as string;

if (fileContents == null)
{
    CacheItemPolicy policy = new CacheItemPolicy();

    List<string> filePaths = new List<string>();
    filePaths.Add("c:\\cache\\example.txt");

    policy.ChangeMonitors.Add(new 
    HostFileChangeMonitor(filePaths));

    // Fetch the file contents.
    fileContents = 
        File.ReadAllText("c:\\cache\\example.txt");

    cache.Set("filecontents", fileContents, policy);
}

Label1.Text = fileContents;

Я реализовал NCache (упомянутый выше), а также Memcached. Я могу вам сказать, что Microsoft Velocity - это действительно способ разделения данных и установки избыточности внутри самих разделов кэша (очень круто). Не говоря уже о том, что это бесплатно!

3 голосов
/ 21 июля 2010

Как писал Эрик, вы можете использовать встроенный в ASP.NET кеш для того, что вы - оно используется всеми сеансами вашего веб-приложения.

Если вы действительно хотите (или должны) иметьобщий кэш для нескольких машин (веб-ферма), тогда вам понадобится какое-то решение распределенного кэширования, например AppFabric , NCache или аналогичное.

2 голосов
/ 21 июля 2010

Да, встроенный кэш ASP.NET используется всеми пользователями (потоком) в приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...