首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

避免NHibernate中实体的第一级缓存?

避免NHibernate中实体的第一级缓存是指在使用NHibernate作为ORM框架时,避免使用其内置的第一级缓存,以提高应用程序的性能。

NHibernate的第一级缓存是指在Session对象的生命周期内,对象的缓存。当用户从数据库中查询一个对象时,NHibernate会将该对象存储在第一级缓存中,以便后续可以直接从缓存中获取该对象,而不需要再次查询数据库。但是,当应用程序需要处理大量数据时,第一级缓存可能会导致内存占用过多,从而影响应用程序的性能。

为了避免第一级缓存的问题,可以采用以下方法:

  1. 使用Session.Clear()方法清除第一级缓存。但是,需要注意的是,这将会清除Session中所有的缓存,可能会影响应用程序的性能。
  2. 使用Session.Flush()方法将Session中的变更同步到数据库中,但不清除第一级缓存。这样可以减少缓存的内存占用。
  3. 使用Session.Evict()方法将某个对象从第一级缓存中移除。这样可以减少缓存的内存占用。
  4. 使用多个Session对象来处理不同的数据集,这样可以避免单个Session对象的缓存占用过多内存。

总之,避免NHibernate中实体的第一级缓存需要根据应用程序的具体需求和性能要求来选择合适的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

实体列表缓存(最土的方法实现百万级性能)

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。...这样的表,往往可以接受三五秒甚至更长的延迟,正是最适合使用缓存的地方。 实体缓存:一次性加载全表数据进入内存,供上层多维度查询! 来看一个例程: ? ? ?...根据查询日志可以看到,虽然执行了1000万次查询,实际上只有一行select日志输出,也就是只查了一次数据库,其它9,999,999次从缓存中查找。...实体缓存的查询速度只取决于 CPU主频,在这台AMD古董机上也可以轻松得到百万级速度。 最后一行是实体缓存统计日志,10秒输出第一次,然后每10分钟输出一次,统计了缓存数、请求数、命中率。 ?...由于实体缓存的添删改过期跟实体操作绑定在一起,因此,越过实体类直接DAL执行更新操作,或者其它服务器修改数据,此时无法影响实体缓存,导致数据更新不及时。

83410
  • Hibernate中的一级缓存

    这是因为 Hibernate使用了一级缓存,一级缓存又叫Session缓存 在一个会话的生命期里面,他所用到的数据会使用缓冲的,第一次读的是编号为2的数据记录 第一次读的时候,内存中什么都没有,这时候就要用一条...select语句从数据库中读出一条记录,同时把这些数据放到session的缓存 里面,接下来又要读同样的数据,这时候他就不会再向数据库读取数据,而是向缓存中读取数据。...,放入缓存中,当执行session.evict(gb);语句时,就会把 缓存中的数据移除掉。...“心狠手辣”,不让敌人有丝毫反抗的有生力量…… 这个方法会让缓存中的所有东西清除的干干净净。...,判断缓存中是否缓存在gb2对象。

    45630

    Mybatis中的延迟加载 一级缓存 二级缓存

    数据的正确与否对最终结果影响很大的 例如:商品的库存,银行的汇率,股市的牌价 Mybatis中的一级缓存 一级缓存:它指的是Mybatis中SqlSession对象的缓存 当我们执行查询之后,查询的结果会同时存入到...第一次发起查询用户 id 为 1 的用户信息,先去找缓存中是否有 id 为 1 的用户信息,如果没有,从数据库查 询用户信息。 得到用户信息,将用户信息存储到一级缓存中。...如果 sqlSession 去执行 commit 操作(执行插入、更新、删除),清空 SqlSession 中的一级缓存,这样 做的目的为了让缓存中存储的是最新的信息,避免脏读。...二级缓存的使用步骤 第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置) 第二步:让当前的映射文件支持二级缓存(IUserDao.xml中配置) 第三步:让当前的操作支持二级缓存...(在select标签中配置) 二级缓存的分析 首先开启 mybatis 的二级缓存。

    65420

    MyBatis 中的一级和二级缓存

    前言 1.1 什么是缓存 缓存是存在内存中的临时数据,通过将我们 「经常查询但不常变的数据」 放在内存中,当我们查询数据时就不在需要从磁盘读取,而只需要从缓存中查询即可,大大提升了查询的效率,解决了高并发系统的性能问题...指向的是同一个对象; 3.3 一级缓存失效的情况 一级缓存是默认一直开启的,我们是关闭不了的。...但是有时候一级缓存会出现失效的情况,主要可能是如下几种原因导致; 「每个 SqlSession 中缓存独立」 当我们使用不同的 SqlSession 时,有多少个 SqlSession 就需要向数据库发起多少次查询请求...)中开启二级缓存; 然后到对应的 xxxMapper.xml 中配置二级缓存; 配置之后,xxxMapper.xml...根据结果可以看出,此时的二级缓存已经生效。若是未生效,则会和一级缓存中的结果一致,两者指向不同的对象,但此时两个引用指向同一对象,说明二级缓存成功。

    48861

    Hibernate中的二级缓存 EHCache

    -- 说明:maxElementsInMemory  设置 保存在内存中的缓存对象的最大数量                etemal  设置缓存中对象 是否永远不过期,如果值为true,超过设置被忽略...,缓存对象永远不过期                timeToIdleSeconds   设置缓存中对象在他过期之前的最大空闲时间,单位为秒                timeToLiveSeconds...   设置缓存中对象在他过期之前的最大生存时间 ,单位为秒                overflowToDisk      设置内存中的缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘中...-- EHCache二级缓存的策略:       只读缓存          (read-only)       读/写缓存          (read-write)       不严格的读/写缓存      ...这就是利用hibernate的二级缓存, 他在内存中保留了我们要查询的id=2的这条记录,所以当我们再次查询的时候,是直接从缓存中读出来。

    51510

    5、MyBatis 中的一级和二级缓存

    前言 1.1 什么是缓存 缓存是存在内存中的临时数据,通过将我们 经常查询但不常变的数据 放在内存中,当我们查询数据时就不在需要从磁盘读取,而只需要从缓存中查询即可,大大提升了查询的效率,解决了高并发系统的性能问题...SQL 语句只查询了一次,当第二次获取相同结果时,直接从缓存中取结果即可,也就解释了为什么 user1 和 user2 指向的是同一个对象; 3.3 一级缓存失效的情况 一级缓存是默认一直开启的,我们是关闭不了的...但是有时候一级缓存会出现失效的情况,主要可能是如下几种原因导致; 每个 SqlSession 中缓存独立 当我们使用不同的 SqlSession 时,有多少个 SqlSession 就需要向数据库发起多少次查询请求...)中开启二级缓存; 然后到对应的 xxxMapper.xml 中配置二级缓存; 配置之后,xxxMapper.xml...若是未生效,则会和一级缓存中的结果一致,两者指向不同的对象,但此时两个引用指向同一对象,说明二级缓存成功。

    63420

    缓存架构中的服务详解!SpringBoot中二级缓存服务的实现

    ") private RedisService redisService; MyBatis Redis二级缓存 MyBatis缓存 一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存...在同一个SqlSession中两次执行相同的SQL语句: 第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据,将不再从数据库查询,从而提高查询效率 当一个SqlSession...结束后该SqlSession中的一级缓存就不存在了 MyBatis默认开启一级缓存 二级缓存: 二级缓存是Mapper级别的缓存: 多个SqlSession去操作同一个Mapper的SQL语句,多个SqlSession...去操作数据库得到数据会存在二级缓存区域,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的 二级缓存的作用域是mapper的同一个namespace 不同的SqlSession...两次执行相同namespace下的SQL语句且向SQL中传递参数也相同即最终执行相同的SQL语句: 第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率

    44220

    【MyBatis学习13】MyBatis中的二级缓存

    二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的。...为了更加清楚的描述二级缓存,先来看一个示意图: 从图中可以看出: sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到该UserMapper的二级缓存中...缓存的执行原理和前面提到的一级缓存是差不多的,二级缓存与一级缓存区别在于二级缓存的范围更大,多个sqlSession可以共享一个mapper中的二级缓存区域。...2.1 开启二级缓存 由于mybaits的二级缓存是mapper范围级别,所以除了在SqlMapConfig.xml设置二级缓存的总开关外,还要在具体的mapper.xml中开启二级缓存。...,flushCache=true表示刷新缓存,这样可以避免数据库脏读。

    95550

    缓存架构中的服务详解!SpringBoot中二级缓存服务实现

    ") private RedisService redisService; MyBatis Redis二级缓存 MyBatis缓存 一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存...**一级缓存的作用域是同一个SqlSession** - **在同一个SqlSession中两次执行相同的SQL语句:** 第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据...,将不再从数据库查询,从而提高查询效率 - 当一个SqlSession结束后该SqlSession中的一级缓存就不存在了 - MyBatis默认开启一级缓存 二级缓存: 二级缓存是Mapper级别的缓存...的 二级缓存的作用域是mapper的同一个namespace 不同的SqlSession两次执行相同namespace下的SQL语句且向SQL中传递参数也相同即最终执行相同的SQL语句: 第一次执行完毕会将数据库中查询的数据写到缓存...中开启MyBatis二级缓存 在myshop-service-user-provider的配置文件中开启MyBatis二级缓存 spring: application: name: myshop-service-user-provider

    50200

    NHibernate中对同一个对象的Lazyload要设置一致

    在NHibernate中出于性能的考虑,经常使用Lazyload的方式来加载关联的对象,关于什么是Lazyload,以及怎么使用,可以参见博客园中的文章,比如:http://www.cnblogs.com.../lyj/archive/2008/10/28/1321494.html 常用NHibernate.ByteCode.Castle动态代理来实现Lazyload,使用该程序集会在运行时创建实体对应的代理类...,如果实体使用了继承关系,并通过NHibernate来映射,那么动态代理类在类型转换时会有问题。...我在调用Flow.Node之前,调用了Task对象,所以NHibernate根据Task的Mapping设置,将Node设置为动态代理类,同时将Node缓存到了Session中,然后再调用Flow.Node...时,系统就会先从缓存中查找是否有对应的Node对象,结果正好有NodeProxy的缓存,所以就直接返回NodeProxy给Flow.Node了,系统根本没有检查Flow.Node是不是立即加载还是懒加载

    32220

    .NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...

    前言 在以前的一篇文章中,为大家分享了《什么是ORM?为什么用ORM?浅析ORM的使用及利弊》。...从构架上来说,linq2db是对比如:Dapper、PetaPoco这个的微ORM的进一步封装,但它不像Entity Framework那样笨重。它没有实现状态跟踪,需要自己处理实体的状态更改等。...在开发过程中参考了NBear与MySoft,吸取了他们的一些精华,加入新思想,同时参考EF的Lambda语法进行大量扩展。该组件已在数百个成熟项目中应用。...推荐等级:★★★☆☆ NHibernate NHibernate是一个面向.NET环境的对象/关系数据库映射工具。...批量的集合加载 带有lazy="extra"的集合 集合过滤器和分页集合 二级缓存(实际上NH的二级缓存貌似也很简单?)

    8.5K90

    C# 数据操作系列 - 11 NHibernate 配置和结构介绍

    ISessionFactory - NHibernate.ISessionFactory: 一个基于单数据库的已编译的映射缓存,它是持久不变的且线程安全(额,这句话是从它的文档翻译过来的)。...是一个提供ISession的工厂类,同时也是一个 IConnectionProvider的客户端。可以设置一个在事务之间的进程级或集群级的二级缓存。...一个ADO.NET连接的封装,用来提供ITransaction的工厂。提供了一个通过主键检索对象和导航链接查询对象时的一级缓存。也就是EF Core中的导航属性。...配置项介绍 在上一篇文章中,我们介绍了一下如何设置NHibernate的基本配置项,但是并未对配置项进行深入。...这一节,将带领大家看一下NHibernate中我们常用的配置,因为配置项有很多,但一大部分通常情况都遇不到使用它的时候。

    1.3K20

    DotNetNuke初试水之结合NHibernate开发和导入一个Module

    这个名字,选择了DOTNET Framework中的 DotNet,并且结合了单词 Nuke,(意在指出这是一个基于.NETFrameWork的开源的,可用于企业应用的文章管理系统)....,DNN提供了一个Web网站应该具备的基本功能,内容管理,日志,安全,多语言支持,流行Search功能,皮肤,缓存,异常处理,页面布局(每个控件摆放设置)。...用向导创建第一个DNN模块 第一次开发,所以我选择完全向导的方式进行。...由于在同一个站点下使用了2中语言所以需要修改Web.Config的配置。 ?...代码重构 生成Nhibernate实体类和Xml文件可以使用CodeSmith或是MyGeneration 应用Nhibernate封装好的NHibernate.Repository类库(在

    1.6K20

    NHibernate介绍「建议收藏」

    相比较而言,有些ORM解决方案需要特殊属性,或者是基于模型对象,这些对象又是从特定的基类中继承而来的。 在NHibernate中不用特殊的修饰就可以让对象和持久化层交互。...要注意的是所有需要持久化的属性必须是虚拟的,并且要开启延迟加载,所有数据模型类中的公共方法必须是虚拟的,哪怕它们并没有包含到映射文件中。 通常来讲,最好把所有的属性都设置为虚拟的。...创建NHibernate映射文件 Nhibernate使用XML映射文件来映射POCO到数据库对象。虽然在很多案例中这可能是一对一关系,但这并不是必定的。...class元素表示到单个POCO的映射。name表示上面的程序集和命名空间中的类名,table属性告诉NHibernate数据库中的哪个表或者视图将被映射。...id元素告诉NHibernate哪个数据库的字段和对应的对象作为一个唯一键来使用。在本例中,我们使用Id这个字段。 generator元素告诉NHibernate怎样给新实体来创建唯一ID。

    76220

    2022年了有哪些值得推荐的.NET ORM框架?

    EntityFramework-Plus - EF的增强工具集,包括过滤器,审核,缓存,查询,批删除,批更新等。...主要特点: 支持 CodeFirst 模式,即便使用 Access 数据库也支持数据迁移; 支持 DbFirst 模式,支持从数据库导入实体类,或使用实体类生成工具生成实体类; 支持 深入的类型映射,比如...NHibernate社区网站 - https://nhibernate.info GitHub地址:https://github.com/nhibernate/nhibernate-core SmartSql...SmartSql = C# 中的 MyBatis + .NET Core+ 缓存(内存 | Redis)+ R/W 拆分 + PropertyChangedTrack +动态存储库 + InvokeSync...内存高效- 它提取并缓存您的对象属性、执行上下文、对象映射和 SQL 语句。它在整个转换和执行过程中重用它们。 动态和混合- 它提供了成熟 ORM 的一些高级功能。

    5.9K11

    Nhibernate入门与demo

    本篇文章阅读对象是:Nhibernate初学者!如果你是Nhibernate的研究者或者已经很熟练的运用Nhibernate请不吝赐教,对本文不足之处进行指教。      带着问题去学习!...3、怎么搭建Nhibernate?      4、怎么使用Nhibernate?      好,我们就带着这几个问题开始我们的Nhibernate的旅程。    ...第一个问题:      要明白Nhibernate是什么,就要首先明白什么是ORM。      ...通俗讲,就是我们操作实体类,然后让ORM框架自动映射到数据库中。      而Nhibernate就是:.Net环境下实现ORM的技术的一个框架!     ...先看项目整体图,作为初学的demo 没有层次,没有优化,只是作为入门的一个简单介绍!      第一步:设计数据库中的表。建立一个User表。

    37230
    领券