Любой способ кешировать объект, используя внешний процесс (т.е. не через код позади страницы)?

У меня есть первая партия действительно массивных данных, которые мне нужны для моего веб-приложения ASP.NET. До сих пор (на самом деле два года!) Не было ничего такого дорогого, чтобы я не мог просто сделать это в Page_Load или сохранить в ViewState или Session. Но теперь мне нужен список объектов, который остается довольно статичным (обновляется не чаще одного раза в день) и содержит около 5000 объектов, и его построение каждый раз на Page_Load приводит к тому, что время загрузки принимает очевидный удар.

Некоторый поиск в Google в отношении кеширования показывает несколько очень простых примеров с использованием таких вещей, как Cache["myStuff"] = myObject; и это все хорошо. Но я хотел бы знать, есть ли способ настроить мое веб-приложение для запуска обновления в определенное время, независимо от того, используется приложение или нет.

Например, я хочу, чтобы этот процесс обновлял список для запуска один раз в день, например, в 4 часа утра, когда никто ничего не использует. Допустим, в первый день дня, Page_Load проверяет захват кэшированного объекта, но возвращает ноль, поэтому в этом случае откусите пулю и запросите / соберите список для оставшегося дня 1, сохраните его в кеше, В течение оставшейся части первого дня никто не должен создавать объект, потому что он находится в кеше и все еще действует.

День 1 заканчивается, а сейчас день 4:00. День 2. Никто не использует никаких страниц. Я хочу, чтобы объект, который был сохранен в кэше с первого дня, был удален и перестроен, чтобы, когда люди утром приходят в офис, первому человеку, который обращается к странице, не нужно было составлять список на сегодня, уже сделано.

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

Надеюсь, у меня есть смысл. Это то, что я хотел бы достичь даже возможно?

3 ответа

Решение

Если вы используете распределенный кеш, такой как MemCached, вы можете создать приложение-службу Windows или консольное приложение для заполнения кеша. Поскольку оба приложения (служба и веб-приложение) будут использовать один и тот же кэш, это решит вашу проблему.

Другое решение состоит в том, чтобы иметь страницу только для этого (т.е. /startcache.aspx), которая будет выполнять кеширование на page_load. И вы можете запланировать запрос на этой странице. Вы также можете скрыть страницу за пределами веб-приложения, используя какой-то брандмауэр (чтобы никто не заходил на эту страницу!). Наконец, хорошая часть этого решения заключается в том, что вы можете повторно использовать текущий код, так как он будет работать в том же проекте.

Надеюсь, поможет.

Redis - это еще одна опция для стороннего хранилища значений кэша / ключа.

Чтобы уменьшить нагрузку на сервер и серверную часть и обслуживать все ежедневные данные (как я понял из вопроса)

Почему бы не создать файл данных (CSV,XML,JSON) и предложить его в качестве точки данных.

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

Создание такого файла может быть выполнено за фиксированное время, сохранено и как таковое всего один раз. Не нужно включать решения для вечеринки (помимо их респектабельных качеств)

Другие вопросы по тегам