系列文章

[Nhibernate]体系结构

[NHibernate]ISessionFactory配置

[NHibernate]持久化类(Persistent Classes)

[NHibernate]O/R Mapping基础

[NHibernate]集合类(Collections)映射 

[NHibernate]关联映射

[NHibernate]Parent/Child

什么是NHibernate.Caches?

NHibernate.Caches是NHibernate的附加软件,它是Kevin Williams(aka k-dub)贡献的。缓存是一个保存实体的地点(在首次加载时);一旦进入缓存,能够取得它们,而无需(再次)查询的后台的存储(数据库)。这意味着它们能更快的加载(或重新加载)。

NHibernate session有一个内部的(一级)缓存,存放着它的实体。这些缓存没有共享,因此session被销毁时它的缓存也被销毁了。NHibernate提供了二级缓存系统;它在SessionFactory级别工作。因此它被同一个SessionFactory产生的session共享。

使用每个请求(request)一个session模式,很多Session可以并发的访问同一个实体,而不用每次都访问数据库,因此性能获得了提升。

贡献者使得在NHibernate中使用不同的缓存提供者成为可能:

  • NHibernate.Caches.Prevalence使得使用底层的Bamboo.Prevalence实现作为缓存提供者成为可能。打开文件Bamboo.Prevalence.license.txt可以看到它的许可信息,你也可以访问它的站点。
  • NHibernate.Caches.SysCache使得底层的System.Web.Caching.Cache实现作为缓存提供者成为可能。这意味着你可以依赖ASP.NET的缓存特性来理解它是怎么工作的。要得到更多的信息,可以阅读CachingApplicationData(MSDN)

如何使用?

这里是在NHibernate中启用二级缓存的步骤:

  • 选择需要使用的缓存提供者并且拷贝它的程序集到你的程序集路径(NHibernate.Caches.Prevalence.dll或者NHibernate.Caches.SysCache.dll)
  • 为了表明使用哪种缓存提供者,在NHibernate配置文件中(可以在YourAssembly.exe.config或者web.config或者.cfg.xml文件)添加如下内容:
 <add key="hibernate.cache.provider_class" value="XXX" />(1)
<add key="relativeExpiration" value="120" />(2)

(1)"xxx"可以是"NHibernate.Caches.Prevalence.PrevalenceCacheProvider,NHibernate.Caches.Prevalence"或者"NHibernate.Caches.SysCache.SysCacheProvider,NHibernate.Caches.SysCache"。
(2)relativeExpiration的值是你希望缓存每个实体的秒数(这里是两分钟)。

添加<cache usage="read-write|nonstrict-read-write|read-only"/>(在<class>后面)到你需要缓存的实体映射中,它也为集合(bag,list,map,set,.....)提供支持。

注意:缓存不会知道另一个进程存储的实体的变化(尽管配置了缓存数据的过期时间)。当缓存被建立在SessionFactory级别,它们会和SessionFactory实例一起被销毁,所以必须在你需要缓存的时候,保持SessionFactory存在。

总结

本文主要讲了如何在nhibernate中使用缓存。有个需要注意的地方:

缓存不会知道另一个进程存储的实体的变化(尽管配置了缓存数据的过期时间)。当缓存被建立在SessionFactory级别,它们会和SessionFactory实例一起被销毁,所以必须在你需要缓存的时候,保持SessionFactory存在。

例子在后续文章中提供,这里只是学习文档内容。

本文来自《NHibernate 中文文档》

[NHibernate]缓存(NHibernate.Caches)的更多相关文章

  1. 一步步学习NHibernate(1)——NHibernate介绍

    请注明转载地址:http://www.cnblogs.com/arhat 第十五章 从本章开始,老魏将给大家一起学习NHibernate这个流行的ORM框架,本来老魏想要和大家一起探讨微软的EF框架的 ...

  2. [NHibernate]查看NHibernate生成的SQL语句

    最近接触到一个用Spring.Net结合NHIbernate的项目,第一次使用,有很多配置,数据操作一旦出问题,很难找到原因,那么如何查看NHibernate发送给数据库的SQL语句呢? 当然我们可以 ...

  3. 一步步学习NHibernate(3)——NHibernate增删改查

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们配置了以下NHibernate的运行环境, 并介绍了NHibernate的中两个非常中重要的接口"I ...

  4. 不得不玩玩NHibernate

    1.0=>前言 放着好好的EF不用,为什么要来玩NHibernate了?那是因为现在的工作内容就是维护一个比较老的项目,第一版是公司找外包做的,跟数据库打交道这块用的NHibernate,虽然都 ...

  5. [Nhibernate]一级缓存

    目录 写在前面 文档与系列文章 一级缓存 一个例子 一级缓存管理 总结 写在前面 上篇文章介绍了nhibernate中对象的三种状态,通过对象的三种状态,很容易想到缓存. 什麽是缓存? 有时候,某些数 ...

  6. [Nhibernate]二级缓存(一)

    目录 写在前面 文档与系列文章 二级缓存 Nhibernate二级缓存提供程序 一个例子 总结 写在前面 上篇文章介绍了nhibernate中一级缓存的相关内容,一级缓存过期时间和ISession对象 ...

  7. [Nhibernate]二级缓存(二)

    目录 写在前面 文档与系列文章 更新数据 二级缓存管理 总结 写在前面 本篇文章也算nhibernate入门系列的结尾了,在总结nhibernate系列的过程中,遇到了很多问题,学习的过程也是解决bu ...

  8. 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存

    一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...

  9. [Nhibernate]二级缓存

    [Nhibernate]二级缓存 目录 写在前面 文档与系列文章 二级缓存 Nhibernate二级缓存提供程序 一个例子 总结 写在前面 上篇文章介绍了nhibernate中一级缓存的相关内容,一级 ...

随机推荐

  1. eclipse配置tomcat出现错误:Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config.

    这是eclipse与之前的server配置冲突导致的,最简单的办法就是给Eclipse换个工作目录(Workspace). 步骤: 打开eclipse后,出现下面图片所示的页面,选择其他目录,重新配置 ...

  2. Oracle11g的最佳灵活体系结构OFA

  3. 用alarmmanager 多次发送PendingIntent

    遇到如下问题 service中得一随机数 用alarmmanager 发送PendingIntent的时候,receiver收到的随机数不变. pendingintent传值经常获取到的值是第一次的值 ...

  4. java设计模式之原型模式

    原型模式概念 该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.java中复制通过clone()实现的.clone中涉及深.浅复制.深.浅复制的概念如下: ⑴浅复制 ...

  5. 用CSS开启硬件加速来提高网站性能

    国外一篇文章,有点意思,转载过来,准备尝试下~ 中文地址:http://www.cnblogs.com/rubylouvre/p/3471490.html 原文地址:http://blog.teamt ...

  6. JavaScript 基础回顾——对象

    JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...

  7. Makefile 编写 tips

    1.变量赋值 VARIABLE = value #在执行时扩展,允许递归扩展 VARIABLE := value #在定义时扩展 VARIABLE ?= value #只有在该变量为空时才设置该值 V ...

  8. HTTPS----安全超文本传输协议

    HTTPS协议详解HTTPS以保密为目标研发,简单讲是HTTP的安全版.其安全基础是SSL协议,因此加密的详细内容请看SSL.全称Hypertext Transfer Protocol over Se ...

  9. AutoCAD2006的安装及CASS7.1的配置破解

    -----本文只限于学习交流,商业用途请支持正版! -----转载请注明:http://www.cnblogs.com/mxbs/p/6193190.html 准备: AutoCAD2006.CASS ...

  10. JavaScript 输出

    javascript 没有任何打印或者输出的函数. 一.javascript 显示数据 javacript可以通过不同的方式来输出数据: 1.使用window.alert()弹出警告框 2.使用doc ...