Enterprise Library深入解析与灵活应用(2):通过SqlDependency实现Cache和Data

Enterprise Library深入解析与灵活应用(2):通过SqlDependency实现Cache和Database的同步

对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理、有效地利用Caching对于增强应用的Performance(减少 对基于Persistent storage的IO操作)、Scalability(将数据进行缓存,减轻了对Database等资源的压力)和Availability(将数据进行缓存 ,可以应对一定时间内的网络问题、Web Service不可访问问题、Database的崩溃问题等等)。Enterprise Library的Caching Application Block为我们提供了一个易用的、可扩展的实现Caching的框架。借助于Caching Application Block,Administrator和Developer很容易实现基 于Caching的管理和编程。由于Caching的本质在于将相对稳定的数据常驻内存,以避免对Persistent storage的IO操作的IO操作,所以有两个 棘手的问题:Load Balance问题;Persistent storage和内存中数据同步的问题。本篇文章提供了一个解决方案通过SqlDependency实现SQL Server中的数据和Cache同步的问题。

一、Cache Item的过期策略

在默认的情况下,通过CAB(以下对Caching Application Block的简称,注意不是Composite UI Application Block )的CacheManager加入的cache item是永不过期的;但是CacheManager允许你在添 加cache item的时候通过一个ICacheItemExpiration对象应用不同的过期策略。CAB定了一个以下一些class实现了ICacheItemExpiration,以 提供不同的过期方式:

AbsoluteTime:为cache item设置一个cache item的绝对过期时间。

ExtendedFormatTime:通过一个表 达式实现这样的过期策略:每分钟过期(*****:5个*分别代表minute、hour、date、month、year);每个小时的第5分钟过期(5****);每 个月的2号零点零分过期(0 0 2 * *)。

FileDependency:将cache item和一个file进行绑定,通过检测file的最后更新时间确定file 自cache item被添加以来是否进行过更新。如果file已经更新则cache item过期。

NeverExpired:永不过期。

SlidingTime:一 个滑动的时间,cache item的每次获取都将生命周期延长到设定的时间端,当cache item最后一次获取的时间算起,超出设定的时间,则cache item过期。

对于过期的cache item,会及时地被清理。所以要实现我们开篇提出的要求:实现Sql Server中的数据和Cache中的数据实 现同步,我们可以通过创建基于Sql Server数据变化的cache item的过期策略。换句话说,和FileDependency,当Persistent storage (Database)的数据变化本检测到之后,对于得cache自动过期。但是,对于文件的修改和删除,我们和容易通过文件的最后更新日期或者是否 存在来确定。对于Database中Table数据的变化的探测就不是那么简单了。不过SQL Server提供了一个SqlDependency的组建帮助我们很容易地 实现了这样的功能。

时间: 2024-12-31 19:15:24

Enterprise Library深入解析与灵活应用(2):通过SqlDependency实现Cache和Data的相关文章

Enterprise Library深入解析与灵活应用(2): 通过SqlDependency实现Cache和Database的同步

对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理.有效地利用Caching对于增强应用的Performance(减少对基于Persistent storage的IO操作).Scalability(将数据进行缓存,减轻了对Database等资源的压力)和Availability(将数据进行缓存,可以应对一定时间内的网络问题.Web Service不可访问问题.Database的崩溃问题等等).Enterprise Library的Caching Application

Enterprise Library深入解析与灵活应用(9):个人觉得比较严重的关于Caching

Enterprise Library深入解析与灵活应用(9):个人觉得比较严重的关于CachingCallHandler的Bug 微软EnterLib的Policy Injection Application Block(PIAB)是一个比较好用的轻量级的AOP框架,你可以通过创建自定义的CallHandler 实现某些CrossCutting的逻辑,并以自定义特性或者配置的方式应用到目标方法上面.PIAB自身也提供了一系列的CallHandler,其中 CachingCallHandler直接

Enterprise Library深入解析与灵活应用(8):WCF与Exception Handling AppBl

Enterprise Library深入解析与灵活应用(8):WCF与Exception Handling AppBlock集成[下] 在上篇中,我详细介绍了如何通过自定义ClientMessageInspector和 ErrorHandler,实现WCF与微软企业库中的Exception Handling Application Block(EHAB)之间的集成.这个方案的基本思路就是:当异常从服务端抛出,利 用EHAB针对某个配置好的异常处理策略进行处理:然后将处理有的异常通过 Servic

Enterprise Library深入解析与灵活应用(8):通过WCF扩展实现与EHAB的集成[

Enterprise Library深入解析与灵活应用(8):通过WCF扩展实现与EHAB的集成[上篇] 在<WCF技术剖析(卷1)>的最后一章,我给出了一个具体的应用WCF的分布式应用实例,我把这个实例命名为PetShop.在这个例子中,我利用WCF的扩展实 现了一些设计.架构模式,比如AOP.IoC等.看过本书的读者,一定还记得我还 通过WCF扩展实现了于微软企业库(Enterprise Library)异常处理应用块 (Exception Handling Application Blo

Enterprise Library深入解析与灵活应用(4):创建一个自定义Exception Handl

Enterprise Library深入解析与灵活应用(4):创建一个自定义Exception Handler改变ELAB的异常处理机制 1.背景与动机 微软Enterprise Library ELAB(Exception Handling Application Block)提供了一种基于策略(Policy)的异常 处理方式,在不同的环境中,比如多层架构中不同的层次中,我们可以定义不同的异常处理策略.对于ELAB来说,Exception Handling Policy = Exception

Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Ha

Enterprise Library深入解析与灵活应用(3):倘若将Unity.PIAB.Exception Handling引入MVP模式 最近在做一个Smart Client Software Factory的项目.熟悉SCSF或者CAB的都应该很清楚MVP这种设计模式.MVP是MVC的一种变体,View和 Mode分别关注于UI的呈现和业务模型,View和Mode完全分离,View通过Presenter实现对业务模型的访问,Presenter"间接"地调 用View实现对UI的操

Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Poli

Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Policy Injection Application Block的集成 Enterprise Library是微软P&P部门开发的众多Open source框架中的一个,最新的版本已经出到了4.0.由于接触Enterprise Library 已经有很长的一段时间,在实际的项目中使用的频率也很高.对此有了一些积累,希望通过这个新的系列和广大网友一起分享和交流.本系列 假设读者已经对Enter

Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Policy Injection Application Block的集成

Enterprise Library是微软P&P部门开发的众多Open source框架中的一个,最新的版本已经出到了4.0.由于接触Enterprise Library已经有很长的一段时间,在实际的项目中使用的频率也很高.对此有了一些积累,希望通过这个新的系列和广大网友一起分享和交流.本系列假设读者已经对Enterprise Library有一定的了解,故而不会对各个Application Block的基本原理和编程模型进行介绍,而把侧重点放在Enterprise Library深层次的实现原

Enterprise Library深入解析与灵活应用(6):自己动手创建迷你版AOP框架

基于Enterprise Library PIAB的AOP框架已经在公司项目开发中得到广泛的使用,但是最近同事维护一个老的项目,使用到了Enterprise Library 2,所以PIAB是在Enterprise Library 3.0中推出的,所以不同直接使用.为了解决这个问题,我写了一个通过方法劫持(Method Interception)的原理,写了一个简易版的AOP框架.(如果对PIAB不是很了解的读者,可以参阅我的文章MS Enterprise Library Policy Inje