代码改变世界

微软企业库4.1学习笔记(十三)缓存模块

2010-04-21 09:05  Virus-BeautyCode  阅读(3931)  评论(3编辑  收藏  举报

  企业库的缓存模块允许开发者在应用中包含本地缓存。它支持内存缓存,内存中缓存的数据,可以用数据库或者其他分离的存储作为后端数据存储。缓存模块可以不经修改而直接使用,它提供了获取数据、添加数据到缓存、清空缓存中的数据所需的全部方法。同样支持可配置的缓存过期和清除策略。

  在构建企业级分布式应用的时候,架构师和开发者将会面对许多挑战。缓存可以帮助他们克服下面的一些挑战:

  •   性能,缓存通过存储和数据消费者最相关的数据,可以提升应用的性能。避免了重复的数据创建,处理和传输。
  •   可扩展性,在缓存中存储资源帮助节省资源,在有增加应用的需要情况下,提高可扩展性。
  •   可获得性,在本地存储数据,应用在网络发生潜在问题、webservice发生问题、硬件发生问题的情况下,应用还是可以生存下来,可以继续使用。

  在缓存模块将会讲述下面的主题

  •   缓存模块简介
  •   使用缓存模块进行开发
  •   关键的解决方案
  •   缓存模块的设计
  •   通过修改来扩展缓存模块的功能
  •   部署和实施
  •   缓存模块的QuickStart

  一、缓存模块简介

  将通过下面的一些话题,帮助你决定缓存模块是否适合你的应用需求。

  •   通用的解决方案
  •   示例代码
  •   缓存模块的突出点
  •   什么时候使用缓存模块
  •   缓存模块的取舍
  •   安全

  除了上面的话题,还将介绍下面的一些内容

  •   使用缓存模块进行开发,首先会介绍如何在你的应用中配置并且使用缓存模块,然后介绍如何选择缓存对应的后端存储方式。
  •   关键的解决方案,介绍如何使用缓存模块完成典型的缓存操作。
  •   缓存模块的设计,解释设计模块的相关决定,以及这些决定背后的原因。
  •   扩展和修改缓存模块,介绍如果通过添加自定义的后端存储以及过期策略来扩展模块,也会介绍如何通过修改源代码来实现。
  •   部署和实施,介绍如何部署和升级模块的程序集。
  •   缓存模块的QuickStart,介绍如何安装和配置Caching QuickStart,然后用一系列的代码实践在应用中常用的缓存操作。

   

 

  1.1常用的解决方案

      在下列情况,很适合使用缓存。

  •       重复访问很少变化,或者没有变化的数据
  •       当数据访问在创建,访问,传输的时候非常耗时的情况下
  •       在一些情况下,数据必须要可以获得,例如,不能访问服务的时候。

      你可以在下面的任何一种应用中使用缓存

  •       Windows Form
  •       Console Form
  •       Windows Service
  •       COM+ server
  •       ASP.NET Web应用或者是webservice

 

 

  你应该在单个的应用程序域中部署缓存模块。每个应用程序域有一个或者多个缓存,有或者没有对应的后端存储。缓存的数据不能在不同的应用程序域中共享。

  缓存模块可以优化性能,并且是线程安全和异常安全的。你可以加入自定义的过期策略和自定义的后端存储。

  1.2代码示例

  下面的代码演示了添加数据到缓存中,从缓存中获取数据。向缓存中添加Goods对象,优先级是2,如果过期不更新缓存,过期时间为最后一次访问之后的5分钟。

  

 

代码
    public class Goods
    {
        
public string ID{get;set;}
        
public string Name{get;set;}
        
public int Price{get;set;}
    }
    
public class CachingTest
    {
        
public static void Test()
        {
        ICacheManager goodsCache
=CacheFactory.GetCacheManager();
        
string id="001";
        
string name="seed";
        
int price=100;
        Goods goods
=new Goods();
        goods.ID 
=id;
        goods .Name
=name;
        goods .Price
=price ;
        goodsCache .Add(goods .ID,goods ,CacheItemPriority .Normal ,
                          
null,new SlidingTime (TimeSpan.FromMinutes (5)));
        
        
//Retrieve the item
        goods =(Goods )goodsCache .GetData (id );
        }
    }

 

 

  1.3使用缓存的突出点

  企业库的缓存模块包含下面的功能:

  •   你可以使用图形化的配置工具进行配置
  •   你可以配置一个持久化的存储位置,用企业库的数据访问模块,和内存中的缓存保持同步。
  •   你可以通过自定义过期策略和自定义后端存储来扩展缓存模块。
  •   你可以以线程安全的方式保证应用的性能。

  1.4决定什么时候使用缓存

  缓存模块适用于大多数的需要缓存的情况,

 

  1.5可替代的缓存模块

  在一些情况,需要另外一个缓存解决方案,例如存在多个应用,缓存和应用不在同一个系统之上。你不能跨web farm同步缓存数据。但是,当你需要改变模块基础行为的时候,你可以用自定义类代替CacheManager。更多的信息,请关注后面的缓存模块的扩展开发。

  ASP.NET Cache

  .NET框架的System.Web命名空间下面包含了一个缓存,在ASP.NET应用中可以通过System.Web.HTTPContext.Cache使用缓存,这个缓存是给ASP.NET应用开发的。当然了,也可以在ASP.NET以外使用缓存,通过System.Web.HTTPRuntime.Cache来访问。ASP.NET缓存要求安装System.Web程序集。在使用之前,开发者要验证在目标平台和系统上是否支持这个程序集。

  1.6安全

  尽管你可以在后端存储中加密缓存的数据,缓存模块却不支持加密内存中的数据。如果一个恶意的用户找到一个损害系统的办法,访问应用进程中的内存,便会访问到内存中缓存的数据。如果这对你的系统是一种威胁,就不要将敏感数据放入缓存,例如性用卡号和密码等。

  

  未完待续。。。。。。。。。。。。。。。。。。。。。