准备应用程序
1、设置对 Microsoft.Practices.EnterpriseLibrary.Common.dll 通用程序集的引用
2、设置对 Microsoft.Practices.EnterpriseLibrary.ObjectBuilder.dll的引用
3、设置对 Microsoft.Practices.EnterpriseLibrary.Caching.dll 的引用
一、配置文件
1、右单击 Application Configuration,指向 New ,然后单击 CachingApplicationBlock,配置控制台自动添加带有默认设置的 CacheManager 节点。
2、设置 Caching Application Block节点的DefaultCacheManager 属性名。
3、设置CacheManager节点的三个属性:
ExpirationPollFrequencyInSeconds 属性:这是定时器控制后台调度程序多久检查过期的条目的频率。单位是秒,最少时间为1秒,默认为60秒。
MaximumElementsInCacheBeforeScavenging 属性:这是清除前可以缓存的最大元素数量。默认设置为1000元素。
NumberToRemoveWhenScavenging 属性:这是在清除开始后移除的元素数量,默认设置为10元素。
二、添加条目到缓存中
使用由 CacheManager 类提供的 add 方法。CacheManager 类添加新的条目到缓存中。如果没有明确的设置超期周期和优先级属性,它们将设置为默认设置。在此用例中的默认设置为 NeverExpired 和 Normal 。如果另一个使用同样的键的条目已存在,那个条目将在新条目添加前被删除。
CacheManager productsCache = CacheFactory.GetCacheManager();
string id = "ProductOneId";
string name = "ProductXYName";
int price = 50;
Product product = new Product(id, name, price);
productsCache.Add(
product.ProductID, //缓存键
product, //被缓存的对象
CacheItemPriority.Normal, //该缓存对象的优先级
null, //ICacheItemRefreshAction 接口的对象。在某个条目从缓存中移除时被调用
new SlidingTime(TimeSpan.FromMinutes(5)) //过期策略
);
三、加载缓存
在使用缓存的数据前,必须首先加载数据到缓存中。
有两种方法可以用于加载数据:
主动加载。此方法为应用程序或进程的生命周期获取所有需要的数据( required state ) 然后缓存它。
被动加载。此方法在应用程序请求时才获取需要的数据,然后缓存它以备将来的请求。
主动加载缓存
public List<Product> GetProductList()
{
//...
}
public void LoadAllProducts()
{
CacheManager cache = CacheFactory.GetCacheManager();
List<Product>list = GetProductList();
for (int i = 0; i < list.Count; i++)
{
Product product = listi;(车延禄)
cache.Add(product.ProductID, product);
}
}
被动加载缓存
public Product GetProductByID(string anID)
{
//...
}
public Product ReadProductByID(string productID)
{
CacheManager cache = CacheFactory.GetCacheManager();
Product product = (Product)cache.GetData(productID);
if (product == null)
{
product = this.dataProvider.GetProductByID(productID);
if (product != null)
{
cache.Add(productID, product);
}
}
return product;
}
四、清空缓存数据
清空可以管理缓存的条目以确定存储、内存和其他资源有效的利用。清空移除缓存中所有的条目,包括那些未过期的。例如,在零售业应用程序中,缓存的数据不再可用,这因为用户的选择或因为用户注销。
CacheManager productsCache = CacheFactory.GetCacheManager();
//...省略的代码
productsCache.Flush();//清空缓存
五、从缓存中移除条目
清理和超期进程自动根据条目的优先级和过期策略从缓存中移除条目,也可以从缓存中移除指定的条目。
public void Remove(CacheManager cache, string key)
{
cache.Remove(key);
}
六、从缓存中获取条目
存储在缓存中的数据必须获取以被显示或处理。使用由 CacheManager 类提供的 GetData 方法,它返回与指定的键关联的值。
public Product GetProduct(CacheManager cache, string key)
{
return (Product)cache.GetData(key);
}(车延禄)