Повторно заполняйте кэш каждые 30 минут новыми данными. - PullRequest
0 голосов
/ 13 сентября 2010

Я пытаюсь создать процесс, который будет заполнять элемент, который был вставлен в кэш каждые 30 минут. Я вставил элемент в Cached, чтобы истечь через 30 минут. Я настроил делегат (http://msdn.microsoft.com/en-us/library/system.web.caching.cacheitemremovedcallback(v=VS.90).aspx), который будет вызываться при истечении срока действия кэшированного элемента. Моя цель состояла в том, чтобы при вызове делегата перестроить элемент и вставить его обратно в кэшированный.

Проблема, которую я обнаружил в статье MSDN выше, заключалась в том, что она использовала удержание экземпляра страницы открытым до вызова делегата. Вместо того, чтобы вызывать другой класс, который был статическим (vb shared). Это вызвало другую проблему - делегат потерял контекст. Когда я попытался добавить обратно в кеш, HttpContext.Current был нулевым.

Есть ли способ, которым я могу заполнять элемент в кэше каждые 30 минут в ASP.NET, не сохраняя экземпляры страниц? Обратите внимание, я не могу использовать скользящую дату истечения срока, потому что содержание будет меняться.

1 Ответ

1 голос
/ 13 сентября 2010

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

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

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

    public static System.Web.Caching.Cache BackgroundCache;    
    public static System.Web.HttpServerUtility BackgroundServer;

затем назначьте их в Application_Start Global.asax

 BackgroundCache = System.Web.HttpContext.Current.Cache;
 BackgroundServer = System.Web.HttpContext.Current.Server;

2. Запустите таймер также в Application_Start, который будет запускаться в асинхронном потоке каждые 30 минут.

3. Заполните кэш оттуда, используя BackgroundCache и BackgroundServer

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