天天看点

缓存篇~第六回 Microsoft.Practices.EnterpriseLibrary.Caching实现基于方法签名的数据集缓存

这一讲中主要是说EnterpriseLibrary企业级架构里的caching组件,它主要实现了项目缓存功能,它支持四种持久化方式,内存,文件,数据库和自定义,对于持久化不是今天讨论的重要,今天主要说,如何使用AOP的思想再配合Caching组件来实现可更新的,可插拔的,松耦合的,基于数据集(结果集)的缓存方案,之所以叫它方案,确实,在实现上有一定难度,我自己对于微软的NLayerApp架构里用到的Attribute注入方式也对一定修改,因为NLayerApp里的缓存数据集并不支持方法参数为对象和lambda表达式的情况,而我的这个方案已经解决了上面两种情况,可以说,完全支持!

我们来看一下Web.config对Caching的配置

 注册sections块

配置caching块

为unity块添加要进行缓存的方法

1 通过CachingAttribute特性对方法进行标识,并配置缓存方式,get,put,remove,一般在添加,修改操作之后,会对缓存进行remove操作

2 CachingMethod标识了缓存的方式

3 一个标准的缓存CRUD接口,它默认使用Microsoft.Practices.EnterpriseLibrary.Caching来实现,当前你可以进行利用这个接口来实现多态

4 使用Microsoft.Practices.EnterpriseLibrary.Caching来实现缓存的持久化功能

5 一个工厂模块,来对缓存的持久化方式进行创建,这个一般可以在配置文件中动态去配置的,本类使用简单的单例模式来进行创建,不考虑多线程情况

7 最后贡献缓存拦截类,这是核心,是提供AOP功能的核心,其中自己添加了对结构体和lambda表达式和类的方法参数的支持,原版应该是陈晴阳写的,但它不支持结构体和lambda和类,所以,我的版本把它完善了。

我们的缓存只能配置在接口的方法中,这主要考虑到unity的注入环节和面向对象的多态特性,本例中,缓存这块配置在了BLL层中,当然,如果你的架构允许,也可以做在DATA层中,当然DATA层的缓存力度可能太大,我觉得并不太合适,但代码可能更精简,所

以,大家要因情况而议,到在哪层都没问题。

缓存配置好后,可以使用sql profiler等监控工具去查看数据库的访问情况!