Стратегии «предварительного нагрева» кэша ASP.NET

У меня есть веб-приложение ASP.NET MVC 3 / .NET, которое в значительной степени управляется данными, в основном вокруг концепции «Местоположение "(Нью-Йорк, Калифорния, и т. Д.).

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

Например:

public ICollection<Location> FindXForX(string x)
{
   var result = _cache.Get(x.ToKey()) as Locaiton; // try cache

   if (result == null) {
      result = _repo.Get(x.ToKey()); // call db
      _cache.Add(x.ToKey(), result); // add to cache
   }

   return result;
}

Но я не хочу, чтобы неудачливый первый пользователь для ожидания этого вызова базы данных.

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

Я хочу наверняка "подогреть" эти вызовы "популярные" места (например, Нью-Йорк, Калифорния), когда мое приложение запускается или вскоре после этого.

Я не Я не хочу просто сделать это в Global asax (Application_Start), потому что приложение будет запускаться слишком долго. (я планирую предварительно кэшировать около 15 местоположений, так что это несколько минут работы.)

Есть ли способ асинхронно запустить эту логику? Может быть, служба на стороне - лучший вариант?

Единственная другая альтернатива, о которой я могу думать, - это иметь страницу администратора , на которой есть кнопки для этих действий. Таким образом, администратор (например, я) может запускать эти запросы после запуска приложения. Это было бы самым простым решением.

Какие-нибудь советы?

11
задан RPM1984 8 February 2011 в 04:23
поделиться