在现代的应用程序和服务中,为了提高性能和响应速度,分布式缓存服务变得越发重要。AppFabric提供了一种分布式缓存解决方案,可以轻松地集成到现有的服务和应用程序中。本文将详细介绍如何安装、配置和使用AppFabric进行缓存。
AppFabric缓存服务可以应用于多种场景,主要包括:
对于WCF服务响应的缓存,如果响应消息已经在缓存中,自定义通道会立即从缓存返回响应消息,而不需要调用底层服务。这不需要客户端实现任何更改。在服务端,需要对要缓存响应的操作应用自定义属性。
对于特定对象的缓存,可以在业务层中缓存从数据存储(数据库或外部服务)检索的数据。这包括一个CacheHelper类,它目前支持:
AppFabric没有图形用户界面,需要使用Powershell进行管理。首先确保AppFabric缓存服务正在运行。可以通过调用Get-CacheHost命令来确定缓存主机是否正在运行。
以下是一个两台服务器缓存集群的示例输出:
HostName : CachePort Service Name Service Status Version Info
-------------------- ------------ -------------- ------------
CacheServer1:22233 AppFabricCachingService UP 1 [1,1][1,1]
CacheServer2:22233 AppFabricCachingService UP 1 [1,1][1,1]
在这个示例中,CacheServer1和CacheServer2都在运行。
下一步是创建一个命名缓存,这是一个用于存储数据的逻辑容器。可以通过Windows PowerShell中的New-Cache cmdlet来实现:
New-Cache appFabricCache
要查看当前缓存的设置,请使用Get-CacheConfig命令:
Get-CacheConfig appFabricCache
在前一个示例中,Get-CacheConfig命令显示了Cache1的缓存配置设置。以下是该命令输出的示例:
CacheName : appFabricCache
TimeToLive : 10 mins
CacheType : Partitioned
Secondaries : 0
IsExpirable : True
EvictionType : LRU
NotificationsEnabled : False
要使用缓存组件,需要添加对Caching Extension库的引用。必须更新应用程序的web.config文件,如下所示:
缓存组件现在已经准备好使用。以下是将利用这个组件的两个不同地方:
[CacheOperationBehavior(MinutesToCache = 5)]
[OperationContract]
CustomerDC GetCustomer(
string customerID);
将[CacheOperationBehavior]属性应用于想要缓存响应的操作。
对于调用数据库的响应进行缓存:
// 从缓存中读取
Customer custObj = (Customer)CacheHelper.Get(CUST_KEY);
// 如果缓存中不存在
if (custObj == null)
{
// 从数据存储中读取
custObj = ReadFromDataStore();
// 填充缓存
cacheHelper.Put(CUST_KEY, custObj);
return custObj;
}
定义一个键的常量,并使用CacheHelper的GetEncryptedKey(string) API获取加密的键。
使用以下所示的Cache-aside模式:
要使用AppFabric缓存,组件需要以下库:
I. 缓存WCF服务响应
客户端的传入调用通过传输通道接收,并在到达Dispatcher之前通过一些通道。Dispatcher将传入调用与适当的操作关联,然后调用它。
创建了一个自定义的OperationInvoker来自定义调用数据存储的行为。
它是如何工作的?
键是通过输入参数和操作名称的组合生成的。但是,由于参数可以是任意数量的对象,因此首先将它们序列化为XML字符串。
它还具有TimeInMinutes属性,用于指示缓存对象的生命周期。
II. 缓存从数据存储检索的数据
目前,CacheHelper类公开了以下API:
性能监控器
AppFabric缓存功能安装了几个性能监控器计数器。有关可用计数器的更多信息,请参见性能计数器。可以观察或记录一些计数器值,以确定典型缓存集群行为的基线。例如,在AppFabric Caching:Cache类别中,可能会观察到Total Client Requests / sec值在一天中不同时间范围内保持在一般范围内。
Windows PowerShell
http://www.microsoft.com/download/en/details.aspx?id=15848