Управление состоянием в ASP.NET
Страница 8. Серверные методы. Cache


Cache

Как и все остальные контейнеры, Cache представляет собой коллекцию типа ключ-значение. В Cache хранятся данные, доступные всем пользователям из всех точек приложения, но за счет использования ключей, специфичных определенному пользователю, его можно использовать для хранения пользовательской информации. Содержимое этого контейнера может сохраняться в течение долго времени, но, к сожалению, теряется при перезапуске веб-приложения или веб-сервера. Характерной особенностью Cache является невероятная гибкость. Он позволяет эффективно хранить любую по объему информацию и содержит механизм устаревания кэшируемой информации в зависимости от ряда условий.

Для каждого значения в Cache можно установить период устаревания информации по времени (абсолютной дате или относительному промежутку времени), либо на основе изменений файла. Также имеется возможность реализовать callback-функцию, которая вызывается при удалении значения из коллекции. Это позволяет проверить не существует ли более свежая версия данных и при необходимости занести ее в коллекцию.

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

Контейнер поддерживает как стандартный доступ к элементам с помощью индексатора, что показано на примере:

/ добавление строки в Cache
Cache["myKey"] = "My Value";
// чтение строки из Cache
string s = (string)Cache["myKey"];

так и ряд других методов. Наиболее используемый из них метод Insert. Он позволяет при записи нового значения в Cache установить период устаревания, зависимость от файла, указать callback-функции и приоритетность информации. Следующие несколько примеров демонстрируют ее использование:

// устаревание при изменении файла 
Cache.Insert("My Key", "My Value", new CacheDependency(Server.MapPath(@"\myServer\myConfig.xml")));
// устаревание по абсолютной дате
Cache.Insert("My Key", "My Value", null, new DateTime(2007,1,1), Cache.NoSlidingExpiration);

// устаревание через 30 секунд
Cache.Insert("My Key", "My Value", null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30));
// устаревание через 30 секунд, значение с повышенным приоритетом
Cache.Insert("My Key", "My Value", null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30),
CacheItemPriority.High, null);
// устаревание по абсолютной дате c использованием callback-функции
// объявление callback-функции
private void RemovedCallback(String key, Object val, CacheItemRemovedReason reason)
{
// некоторые действия
}
// добавление в Cache
Cache.Insert("My Key", "My Value", null, new DateTime(2007,1,1),
Cache.NoSlidingExpiration, CacheItemPriority.Low,
new CacheItemRemovedCallback(RemovedCallback));

 
« Предыдущая статья   Следующая статья »