Welcome

首页 / 软件开发 / .NET编程技术 / NHibernate之旅(23):探索NHibernate二级缓存(上)

NHibernate之旅(23):探索NHibernate二级缓存(上)2010-07-23 cnblogs 李永京本节内容

引入

介绍NHibernate二级缓存

NHibernate二级缓存提供程序

实现NHibernate二级缓存

结语

引入

上一篇我介绍了NHibernate内置的一级缓存即ISession缓存。这篇我们来了解下NHibernate二级缓存即ISessionFactory级别缓存。二级缓存是可扩展的,在NHibernate Contrib上提供了第三方NHibernate二级缓存提供程序。

介绍NHibernate二级缓存

NHibernate二级缓存由ISessionFactory创建,可以被所有的ISession共享。

在NHibernate中,当我们启用NHibernate二级缓存。使用ISession进行数据操作时,NHibernate首先从内置缓存(一级缓存)中查找是否存在需要的数据,如果内置缓存不存在需要的数据,则查询二级缓存,如果二级缓存中存在所需数据,则直接使用缓存中数据,否则从数据库中查询数据并放入缓存中。

NHibernate本身提供了一个基于Hashtable的HashtableCache缓存,但是功能非常有限而且性能比较差,不适合在大型应用程序使用,我们可以使用第三方缓存提供程序作为NHibernate二级缓存实现。

但是,使用缓存的缺点就是如果缓存策略设置不当,NHibernate不知道其它应用程序对数据库的修改及时更新缓存。因此,建议只对系统经常使用、数据量不大且不会被其它应用程序修改的只读数据(或很少被修改的数据)使用缓存。

NHibernate二级缓存提供程序

NHibernate提供了NHibernate.Cache.ICacheProvider接口用来支持第三方缓存提供程序实现。开发缓存提供程序时,需要实现该接口作为NHibernate和缓存实现直接的适配器。NHibernate提供了常见的缓存提供程序的内置适配器,这些适配器都实现了NHibernate.Cache.ICacheProvider接口。

除了NHibernate本身提供的一个基于Hashtable的HashtableCache缓存,在NHibernate Contrib上提供了六种第三方NHibernate二级缓存提供程序,完全开源的。我们直接下载其程序集引用到我们的项目中就可以使用了。

NHibernate.Caches.MemCache

NHibernate.Caches.Prevalence

NHibernate.Caches.SharedCache

NHibernate.Caches.SysCache

NHibernate.Caches.SysCache2

NHibernate.Caches.Velocity