企业库的缓存模块允许开发者在应用中包含本地缓存。它支持内存缓存,内存中缓存的数据,可以用数据库或者其他分离的存储作为后端数据存储。缓存模块可以不经修改而直接使用,它提供了获取数据、添加数据到缓存、清空缓存中的数据所需的全部方法。同样支持可配置的缓存过期和清除策略。
在构建企业级分布式应用的时候,架构师和开发者将会面对许多挑战。缓存可以帮助他们克服下面的一些挑战:
- 性能,缓存通过存储和数据消费者最相关的数据,可以提升应用的性能。避免了重复的数据创建,处理和传输。
- 可扩展性,在缓存中存储资源帮助节省资源,在有增加应用的需要情况下,提高可扩展性。
- 可获得性,在本地存储数据,应用在网络发生潜在问题、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 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安全
尽管你可以在后端存储中加密缓存的数据,缓存模块却不支持加密内存中的数据。如果一个恶意的用户找到一个损害系统的办法,访问应用进程中的内存,便会访问到内存中缓存的数据。如果这对你的系统是一种威胁,就不要将敏感数据放入缓存,例如性用卡号和密码等。