Enterprise Library: Caching Application Block概述

Enterprise Library: Caching Application Block概述

 

Written by: Rickie Lee (rickieleemail#yahoo.com)

My blog:http://www.cnblogs.com/rickie

Enterprise LibraryCaching Application Block允许开发人员在应用程序中采用本地缓存(Cache),它支持内存缓存和可选的辅助存储器(Enterprise Library Data Access Application Block或隔离的存储器(Isolated storage))。该Application Block提供了检索、增加和删除缓存数据的所有功能,还包括可配置的有效期和清除策略(Expiration and Scavenging Policies)。

 

在创建企业级分布式应用程序时,架构师和开发人员经常面临许多挑战,缓存技术可以帮助克服如下一些挑战:

  • 性能(Performance):通过存储相关的数据尽可能靠近数据消费者,缓存提供了应用程序的性能。这样可以避免重复的数据创建、处理和传输。
  • 可扩展性(Scalability):随着应用程序需求的增加,缓存信息有助于节省资源并提高可扩展性。
  • 可用性(Availability):通过存储数据在本地缓存中,应用程序可以幸免于系统故障,如网络延迟、Web Service问题和硬件故障等等。

 

Caching Application Block适用于如下情况:

  • 必须重复访问静态数据或很少改变的数据。
  • 数据访问在创建、访问或传输方法代价高昂。
  • 数据必须总是可以访问,即使当源服务器不能访问。

另外,Caching Application Block可以在如下的应用程序类型中采用:Windows Forms, Console Application, Windows Services, COM+ ServerASP.NET Web Application and Web Service(如果需要使用ASP.NET cache不包含的特性和功能)。

 

Caching Application Block必须部署在单一应用程序域内,每一个应用程序域可以有一个多多个缓存,缓存不能在不同应用程序域之间共享。Caching Application Block性能优化且线程安全和异常安全(Exception Safe),你可以通过定制有效期策略和辅助存储器来进行扩展。

 

配置Caching Application Block

1)通过Configuration Console配置管理工具添加Caching Application Block,默认会创建一个Cache Manager,可以根据需要创建多个Cache Manager

2)这里将Cache Manager改名为Default Cache Manager,并将Caching Application Block节点的DefaultCacheManager属性设置为Default Cache Manager

3)选择Default Cache Manager,右侧面板显示对应的属性及其属性值。

ExpirationPollFrequencyInSeconds:设置BackgroundScheduler轮询过期数据项的频率(单位:秒),缺省值60秒。

MaximumElementsInCacheBeforeScavenging:设置在开始清除缓存中数据项之前,缓存中可以包含的最多数据项,默认值为1000

NameCache Manager的名称。

NumberToRemoveWhenScavenging:设置在每次开始清除缓存中数据项时,清除的数据项,默认值为10

4)选择Default Cache Manager,添加或设置Cache Storage。默认情况下,仅将数据项缓存在内存中,并设置辅助存储器(Backing Storage)的属性值为NullBackingStore。你也可以设置Backing StorageData Cache StorageIsolated Storage

Data Cache Storage使用Data Access Application作为Database Provider,并将缓存数据存放在数据库中。Caching Application Block中提供了如下SQL SCRIPT用来创建相应的数据库Schema

C:\Program Files\Microsoft Enterprise Library\src\Caching\Scripts\CreateCachingDb.cmd

Caching Application BlockConfiguration Console界面如下:
Enterprise_CachingAB_Configuration.jpg

 

Proactive loadingReactive loading

将数据缓存可以提供应用程序的性能,如下有2种方式来装载数据到缓存中:

Proactive loading:该方法首先检索所有需要的数据,然后在应用程序或进程整个生命期内缓存数据。

Reactive loading:该方法根据应用程序的需要检索必要的数据,然后将数据存放在缓存中,用于将来的请求。

关于Proactive loadingReactive loading的优缺点及适用情况,可以参考Caching Application Block中的Loading the Cache文档。

 

调用Caching Application Block的代码片断

首先需要引用Microsoft.Practices.EnterpriseLibrary.Caching.dll,并在代码中添加:

using Microsoft.Practices.EnterpriseLibrary.Caching;

1)添加数据项到缓存

private CacheManager primitivesCache;

// Use the default cache manager for the primitive operations

this.primitivesCache = CacheFactory.GetCacheManager();

// 创建缓存数据项

Product product = new Product(

          this.enterNewItemForm.ProductID,

          this.enterNewItemForm.ProductShortName,

          this.enterNewItemForm.ProductPrice);

// 调用CacheManagerAdd方法

primitivesCache.Add(product.ProductID, product);

 

上述代码调用CacheManager.Add(key, value)方法,将数据项放入缓存,这是Add方法一个比较简单的重载。该Add方法添加的数据项不会过期,并且设置CacheItemPriority属性为Normal

 

如果缓存中已经存在相同key的数据项,则先移除现有数据项,然后添加新的数据项。如果在整个处理过程中出现异常,则缓存保持原样。

 

此外,CacheManager.Add方法还有如下重载:

public void Add(

   string key,

   object value,

   CacheItemPriority scavengingPriority,

   ICacheItemRefreshAction refreshAction,

   params ICacheItemExpiration[] expirations

);

scavengingPriority 指定新数据项的scavenging优先级。

refreshAction:该对象允许更新缓存中过期数据项。

expirationsParam数组指定该数据项的有效期策略,可以为null或忽略。

 

2)将数据项移出缓存

// Request that the item be removed from the cache.

this.primitivesCache.Remove(product.ProductID);

如果该item不在缓存中,该Remove方法什么都不做。

 

3)从缓存中检索数据

// Read the item from the cache. If the item is not found in the cache, the

// return value will be null.

Product product = (Product) this.primitivesCache.GetData(product.ProductID);
如果缓存中不存在该item,则返回null值。 

4)清除所有缓存数据
this.primitivesCache.Flush();
清除缓存中所有数据。

***

作者:Rickie Lee (rickieleemail#yahoo.com)

本文参考Microsoft Enterprise LibraryCaching Application Block文档及其QuickStart

 

References:

1. Microsoft Enterprise Library: Caching Application Block.

2. Rickie, Microsoft patterns & practices Enterprise Library January 2005 [中文稿], http://www.cnblogs.com/rickie/archive/2005/01/30/99443.html

3. Rickie, Enterprise Library released! http://www.cnblogs.com/rickie/archive/2005/01/29/99106.html

 
posted @ 2005-02-17 08:20  Rickie  阅读(11342)  评论(12编辑  收藏  举报