• 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

     
  • 相关阅读:
    npm install --save
    ajax总结
    javascript学习资料
    前端工具学习资料
    php学习资料
    Bootstrap学习资料
    css学习资料
    Express搭建一个Node项目
    网站性能优化
    POJ 1862 Stripies【哈夫曼/贪心/优先队列】
  • 原文地址:https://www.cnblogs.com/rickie/p/105013.html
Copyright © 2020-2023  润新知