zoukankan      html  css  js  c++  java
  • [NHibernate]缓存(NHibernate.Caches)

    系列文章

    [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文件)添加如下内容:
    1 <add key="hibernate.cache.provider_class" value="XXX" />(1)
    2 <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 中文文档》

     

  • 相关阅读:
    zookeeper与activemq最新存储replicatedLevelDB整合
    MySQL分表的3种方法
    mycat 从入门到放弃 (转)
    centos 7 忘记密码
    java内存溢出的情况解决方法
    跨域问题的产生及解决方法
    一次jvm调优过程
    2019年总结
    Jenkinsfile与Json的转换
    DevOps平台
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/3724052.html
Copyright © 2011-2022 走看看