Настраивать
.NET 4.5, .NET MVC 4, IIS 8, c #
Задний план
Я использую HttpContext.Current.Cache
в течение многих лет для кеширования созданных объектов для одного пользовательского сеанса, чтобы повысить производительность. Это прекрасно работает.
Теперь мне нужно кэшировать созданные объекты на корневом уровне, чтобы любой пользователь из любого браузера, запрашивающий страницу с информацией, которая должна быть кэширована, получал эти данные из кеша, а не только что созданный объект, который извлекал данные из бэкэнда.
Итак, я изменил свое кеширование с HttpContext.Current.Cache
на HttpRuntime.Cache
. Вот пример добавления объекта в кеш:
/// <summary>
/// Insert value into the cache using
/// appropriate name/value pairs
/// </summary>
/// <typeparam name="T">Type of cached item</typeparam>
/// <param name="o">Item to be cached</param>
/// <param name="key">Name of item</param>
public static void Add<T>(T o, string key)
{
if (!string.IsNullOrEmpty(key))
{
// NOTE: Apply expiration parameters as you see fit.
HttpRuntime.Cache.Insert(
key,
o,
null,
DateTime.Now.AddDays(30),
Cache.NoSlidingExpiration);
}
}
Проблема
После этого я загрузил страницу на свой рабочий стол в Chrome и ожидал, что она будет загружаться медленно, поскольку первый запрос должен вызвать базу данных и построить мои объекты.
Затем я перешел на другой компьютер и вызвал ту же страницу, и это заняло столько же времени! После первого запроса на каждом другом ПК / браузере все стало быстро, как и должно быть. Это говорит о том, что мои объекты по-прежнему кэшируются для каждого сеанса.
Возможность
Если никто не замечает очевидную ошибку, которую я сделал, мне интересно, возможно, мои проблемы связаны с кластером серверов, распространяющим приложение. Итак, если кто-то знает об этом, я использую Rackspace Cloud Hosting.