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

未命中Hibernate一级缓存

是指在使用Hibernate进行数据库操作时,查询结果没有命中一级缓存。Hibernate的一级缓存是指SessionFactory级别的缓存,也称为Session缓存,它默认是开启的,用于存储Hibernate查询的结果集和持久化对象。当查询某个对象时,Hibernate会首先查看一级缓存中是否存在该对象的缓存数据,如果存在则直接返回缓存数据,提高查询性能。但是,如果没有命中一级缓存,需要从数据库中获取数据。

一级缓存的优势是可以减少数据库查询次数,提高性能。同时,由于一级缓存是Session级别的,因此可以保证在同一个Session中的多次查询共享缓存数据,避免重复查询数据库。

未命中Hibernate一级缓存的可能原因有:

  1. 第一次查询:如果是第一次查询某个对象,自然无法命中缓存,需要从数据库中获取数据。
  2. Session关闭:如果在查询之前或者查询之后关闭了Session,那么一级缓存也会被清空,下一次查询就无法命中缓存。
  3. 事务提交:如果在查询之前存在未提交的事务,那么查询操作会刷新一级缓存,导致缓存被清空,下一次查询无法命中缓存。
  4. 查询结果不在缓存范围内:如果查询的对象在一级缓存中不存在,或者已经被从缓存中移除,那么查询操作就无法命中缓存。

推荐的腾讯云相关产品:腾讯云数据库 TencentDB、腾讯云服务器 CVM、腾讯云对象存储 COS。

腾讯云数据库 TencentDB:腾讯云提供了多种类型的数据库服务,包括关系型数据库、缓存数据库和分布式数据库等。TencentDB是腾讯云的关系型数据库服务,提供了高可用、高性能、弹性伸缩的数据库解决方案。具体产品介绍和链接地址请参考:TencentDB产品介绍

腾讯云服务器 CVM:腾讯云服务器是一种弹性计算服务,可以根据需求快速创建和部署云服务器,提供高性能、安全可靠的计算能力。具体产品介绍和链接地址请参考:腾讯云服务器 CVM

腾讯云对象存储 COS:腾讯云对象存储是一种可扩展的云存储服务,用于存储和管理海量的非结构化数据。它提供了高可靠性、低延迟和高可用性的数据存储方案。具体产品介绍和链接地址请参考:腾讯云对象存储 COS

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

相关·内容

  • 一级缓存、二级缓存、查询缓存

    1):Session 级别的缓存,与session邦定。它的生命周期和session相同。 Session消毁,它也同时消毁;管理一级缓存,一级缓存无法取消 2):两个Session 不能共享一级缓存,因它会伴随session的生命周期的创建和消毁; 3):get使用了一级缓存,用get查数据时,首先检查缓存中是否有该数据,如果有直接从缓存中取数据,如果没有再查询数据库,并且将数据放入缓存中。 load也支持一级缓存。load还支持lazy.当load从数据库中查询数据后,也会将数据放入缓存。 unique/list查询不会去查看缓存,但是list查询的实体对象将会放入缓存中。 4):与一级缓存相关方法: session.clear():清除一级缓存中所有的对象。 boolean contains(Object entity):判断一级缓存中是否有给定的对象。 session.evict(Object entity):从一级缓存中清除指定的对象。 session.flush():把一级缓存中的脏数据同步到数据库中。 session.refresh((Objectentity):强制重新查询对象,相当于把数据库中的数据同步到一级缓存中。

    03

    Hibernate缓存配置

    一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口list,filter,iterate时,如session缓存中还不存在相应的对象,Hibernate会把该对象加入到一级缓存中, 当Session关闭的时候该Session所管理的一级缓存也会立即被清除 Hibernate的一级缓存是Session所内置的,不能被卸载,也不能进行任何配置 二级缓存配置: 1、首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置: <property name="hibernate.cache.use_second_level_cache">true</property> 2、Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个 缓存工具。如下配置指定Hibernate使用EhCache缓存工具。 <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 3、Hibernate在默认情况下并不会对所有实体对象进行缓,所以,我们需要指定缓存哪些对象, 在实体对象的映射文件中(相应的<class>标签内部),添加如下配置: <cache usage="read-only"/> usage="read-only"是“只读”缓存策略。 注意,这个<cache>标签只能放在<class>标签的内部,而且必须处在<id>标签的前面!!! 这个<cache>标签放在哪些<class>标签下面,就说明会多这些类的对象进行缓存 4、对于第3步,有一个可选的方案是在hibernate.cfg.xml文件中指定哪些类的对象需要缓存, 而不需要使用<cache>标签来指定。如: 在hibernate.cfg.xml中添加如下配置: <class-cache class="com.bjsxt.hibernate.Classes" usage="read-only" /> 注意,这个<class-cache>标签必须放在<mapping>标签的后面!! Hibernate缓存配置 _____________________________________________________________________________________ Hibernate的缓存分为:   一级缓存:在Session级别的,在Session关闭的时候,一级缓存就失效了。   二级缓存:在SessionFactory级别的,它可以使用不同的缓存实现,如EhCache、JBossCache、OsCache等。 缓存的注释写法如下,加在Entity的java类上:   @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 缓存的方式有四种,分别为:   CacheConcurrencyStrategy.NONE   CacheConcurrencyStrategy.READ_ONLY,只读模式,在此模式下,如果对数据进行更新操作,会有异常;   CacheConcurrencyStrategy.READ_WRITE,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;   CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不严格的读写模式则不会的缓存数据加锁;   CacheConcurrencyStrategy.TRANSACTIONAL,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持JTA环境。 另外还有如下注意事项:   1、查询缓存需要在Query的相应方法执行前加上这么一句:   query.setCacheable(true);   在使用Hibernate时,获得的query有setCacheable方法,可以设置使用缓存,但当使用JPA时,javax.persistence.Query并没有setCacheable方法,此时如果JPA的实现是Hibernate时,可以将其进行如下转化,再调用setCacheable方法(如果JPA的实现是其它ORMAP框架,就不知道怎么做了)。 if (query

    01

    在Hibernate中,使用二级缓存机制要注意什么?

    Hibernate中使用二级缓存时要注意的几点如下: 二级缓存能够明显提高系统的性能,当然,如果数据量特别巨大,此时不适合于二级缓存,原因是缓存的数据量过大可能会引起内存资源紧张,反而降低性能。 对于数据更新频率过高的数据,频繁地同步缓存中数据的代价可能和查询缓存中的数据从中获得的好处相当,坏处和益处相抵消,此时缓存的意义也不大。 财务数据等非常重要的数据,绝对不允许出现或使用无效的数据,所以此时为了安全起见,最好不要使用二级缓存。因为此时“正确性”的重要性远远大于“高性能”的重要性。 因为数据表中的数据量

    02

    Hibernate二级缓存配置

    Cache就是缓存,它往往是提高系统性能的最重要手段,对数据起到一个蓄水池和缓冲的作用。Cache对于大量依赖数据读取操作的系统而言尤其重要。在大并发量的情况下,如果每次程序都需要向数据库直接做查询操作,它们所带来的性能开销是显而易见的,频繁的网络舆,数据库磁盘的读写操作都会大大降低系统的性能。此时如果能让数据库在本地内存中保留一个镜像,下次访问的时候只需要从内存中直接获取,那么显然可以带来不小的性能提升。引入Cache机制的难点是如何保证内存中数据的有效性,否则脏数据的出现将会给系统带来难以预知的严重后果。虽然一个设计得很好的应用程序不用Cache也可以表现出让人接受的性能,但毫无疑问,一些对读取操作要求比较高的应用程序可以通过Cache获得更高的性能。对于应用程序,Cache通过内存或磁盘保存了数据库中的当前有关数据状态,它是一个存储在本地的数据备份。Cache位于数据库和应用程序之间,从数据库更新数据,并给程序提供数据。

    02
    领券