Страница 8 из 9
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)); |