zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    HDU 5486 Difference of Clustering 图论
    HDU 5481 Desiderium 动态规划
    hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
    HDU 5478 Can you find it 随机化 数学
    HDU 5477 A Sweet Journey 水题
    HDU 5476 Explore Track of Point 数学平几
    HDU 5475 An easy problem 线段树
    ZOJ 3829 Known Notation 贪心
    ZOJ 3827 Information Entropy 水题
    zoj 3823 Excavator Contest 构造
  • 原文地址:https://www.cnblogs.com/rickie/p/105013.html
Copyright © 2011-2022 走看看