Hibernate的缓存机制

一、缓存的范围分类

        1、事务范围(单Session 即一级缓存)
        事务范围的缓存只能被当前事务访问,每个事务独有各自的缓存,缓存的数据通常采用相互关联的对象形式,缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束,事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围。
        2、应用范围(单SessionFactory 即二级缓存)
        应用程序的缓存可以被应用范围内的所有事务共享访问,缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束,应用范围的缓存可以使用内存或硬盘作为存储介质,二级缓存就属于应用范围。
        3、集群范围(多SessionFactory)
        在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点中,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式。

二、一级缓存

        1、使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率;(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据。如果有数据就不查询数据库,直接从缓存中获取数据);
        2、Hibernate中的一级缓存,也叫做session缓存,它可以在session范围内减少数据库的访问次数,只在session范围内有效,session关闭,一级缓存失败;
        3、一级缓存的特点,只在session范围有效,作用时间短,效果不是特别明显,在短时间内多次操作数据库,效果比较明显;
        4、当调用session的save、get、load、list、iterator等方法的时候,都会把对象放入到session缓存中;
        5、session的缓存是由hoernate维护的,用户不能操作缓存内容;如果想要操作缓存内容,必须通过hibernate提供的evict、clear方法操作;
        6、缓存相关的方法在什么情况下可以使用呢?在批量操作下使用:
        session.flush();让一级缓存与数据库保持同步
        session.evict();清空一级缓存中指定的对象
        session.clear();清空一级缓存中所有的对象

三、二级缓存

        基于应用程序级别的缓存,作用在SessionFactory范围内,可以跨多个session,即不同的session都可以访问缓存。Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架,如果用户想用二级缓存,只需要在hibernate的配置文件中配置即可,不想用,直接删除,不影响代码。
        1、在执行各种条件查询时,如果所获得的结果为实体对象的集合,那么就会把所有的数据对象根据ID放入到二级缓存中。
        2、当Hibernate根据ID访问数据对象的时候,首先会从session一级缓存中查找,如果查不到并且配置了二级缓存,那么会从二级缓存中查找,如果还是查不到,就会查询数据库,把结果按照ID放入到缓存中。
        3、删除、更新、增加数据的时候,同时更新缓存。

四、引入第三方缓存(如ehcache等)

转载于:https://my.oschina.net/u/4169647/blog/3081777

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值