2009-11-19 2 views
4

Я использую API кэширования данных ASP.NET. Например:ASP.NET Data Cache - сохранение содержимого после перезапуска домена приложения

HttpRuntime.Cache.Insert(my_data, my_key); 

Есть ли способ настроить кеш, чтобы его содержимое сохранялось при повторном использовании домена приложения?

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

+0

Прогресс на этом? – Middletone

ответ

2

Есть ли способ настроить кэш таким образом его содержимое сохраняется при App домена перерабатывает?

№ Объект Cache содержит ссылки в ОЗУ. Период.

Альтернативы:

  1. Нет в процессе состояния сеанса (хотя это для каждого пользователя)
  2. распределенного кэша
  3. Использование SQL Server в качестве кэш-памяти (где он хранит данные в памяти, а не на диске)
  4. Записать объекты на диск на веб-ярусе

Я вообще предпочитаю # 3 сам, хотя есть сценарий где другие подходят.

+0

API-интерфейс кэша не может быть настроен на сохранение SQL Server, правда? Мне нужно будет изменить мои текущие вызовы API Cache, чтобы пройти через другой API. – frankadelic

+0

Исправить. API Cache работает только для ссылок на память; нет никаких параметров, чтобы сделать записи стойкими. Причина в том, что персистентность требует сериализации в некоторой форме, что дорого. На самом деле одно из распространенных применений API Cache заключается в том, чтобы избежать сериализации и связанных с этим издержек. Однако, если ваши данные возникли из SQL Server, вам не нужно снова это повторять; вам просто нужно быть уведомленным, если он изменится, что и есть SqlDependency. – RickNZ

0

Утилизация appdomain сбрасывает кеш. Если вы хотите обойти это, вам нужно будет использовать распределенный кеш. Пример Here.

0

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

Теперь, поскольку кеш в proc очень быстрый по сравнению с любым другим решением, поскольку он просто содержит ссылку на объект памяти, вы захотите использовать его там, где это возможно. Вы можете сохранить копию своего кэшированного объекта на диске до тех пор, пока он не будет потерян, а затем повторно создайте его и поместите в память. В тех случаях, когда это сложно, когда вам нужно закончить данные, используйте только кеш/диск/sql, где вам не нужно будет истекать/недействить данные, иначе вам нужно будет очистить их. Это также обойдется без возможности реализовать распределенное кэширование на общем сервере, например.