NHibernate学习之旅
来源:互联网 发布:剑网3脸型数据非法 编辑:程序博客网 时间:2024/04/28 15:23
http://www.cnblogs.com/lyj/archive/2008/10/30/1323099.html
学习摘要:
NHibernate缓存机制
----------------------------
NHibernate一级缓存即ISession缓存,ISession缓存属于事务级缓存,是NHibernate内置的。ISession缓存中的数据只在本ISession周期内使用。
比较ISession.Get()和ISession.Load():使用ISession.Get()方法立即把对象实例保存到缓存中,使用ISession.Load()方法当你需要使用的时候再访问数据库把这个实例保存在缓存中。
显式管理一级缓存:
ISession.Evict(object):从缓存中删除指定实例。
ISession.Clear():清空缓存。
ISession.Contains(object):检查缓存中是否包含指定实例。
NHibernate二级缓存由ISessionFactory创建,可以被所有的ISession共享。
NHibernate本身提供了一个基于Hashtable的HashtableCache缓存,但是功能非常有限而且性能比较差,不适合在大型应用程序使用,我们可以使用第三方缓存提供程序作为NHibernate二级缓存实现。
但是,使用缓存的缺点就是如果缓存策略设置不当,NHibernate不知道其它应用程序对数据库的修改及时更新缓存。因此,建议只对系统经常使用、数据量不大且不会被其它应用程序修改的只读数据(或很少被修改的数据)使用缓存。
NHibernate提供了NHibernate.Cache.ICacheProvider接口用来支持第三方缓存提供程序实现。
NHibernate内置四种并发访问策略:
read-only:只读缓存。适用于只读数据。可用于群集中。
read-write:读写缓存。
nonstrict-read-write:非严格读写缓存。不保证缓存与数据库的一致性。
transactional:事务缓存。提供可重复读的事务隔离级别。
NHibernate二级缓存由ISessionFactory创建并由ISessionFactory自行维护, 同时也提供了可编程方式的缓存管理方法。
ISessionFactory提供了一系列的EvictXXX()方法可以方便的从二级缓存中删除一个实例、删除一个集合、一个命名缓存等操作
Evict(persistentClass):从二级缓存中删除persistentClass类所有实例
Evict(persistentClass, id):从二级缓存中删除指定的持久化实例
EvictEntity(entityName):从二级缓存中删除命名实例
EvictCollection(roleName):从二级缓存中删除集合
EvictCollection(roleName, id):从二级缓存中删除指定的集合
EvictQueries():从二级缓存中刷新全部查询结果集
EvictQueries(cacheRegion):从二级缓存中刷新指定查询结果集
ISession内置缓存可以共享ISessionFactory缓存,通过指定ISession的CacheMode可以控制ISession和ISessionFactory的交互方式。
ISession可以通过以下五种方式和ISessionFactory交互:
Ignore:更新数据时将二级缓存失效,其它时间不和二级缓存交互
Put:向二级缓存写数据,但不从二级缓存读数据
Get:从二级缓存读数据,仅在数据更新时向二级缓存写数据
Normal:默认方式。从二级缓存读/写数据
Refresh:向二级缓存写数据,想不从二级缓存读数据,通过在配置文件设置
cache.use_minimal_puts从数据库中读取数据时,强制二级缓存刷新
强制刷新缓存区域,以避免数据不一致问题: ISession.SetCacheMode(CacheMode.Refresh)
- NHibernate学习之旅
- NHibernate学习之旅(一)
- NHibernate学习之-配置
- 跟NHibernate之夏一起学习NHibernate
- 开始Nhibernate之旅---Nhibernate是什么
- Nhibernate学习之起步篇
- Nhibernate学习之起步篇
- NHibernate之旅:借鉴
- NHibernate之旅:借鉴
- NHIbernate学习之旅【九】—— 生成工具
- NHibernate之旅(写在前面)
- [原创]Fluent NHibernate之旅
- Fluent NHibernate之旅一
- Nhibernate学习之起步篇-1
- Nhibernate学习之many-to-many篇
- Nhibernate学习之性能改善1
- nhibernate学习之集合组合依赖
- Nhibernate学习之起步篇-1
- CWnd指针和HWnd
- fdfdsf
- shell经典,shell十三问
- MFC Windows 程序设计->控制窗口大小 WM_GETMINMAXINFO
- Mongodb 学习
- NHibernate学习之旅
- silverlight中DataGrid单元格变色问题
- MyEclipse使用经验总结
- 多线程编程的简单介绍
- 学习android的一个好的网址
- STM32 串口DMA方式接收
- ajax请求xml
- ControlDecorationSupport
- MapObject 控件的使用之加入图层(作者/张松伟)