hibernate进阶--一/二级缓存策略

       缓存(Cache):计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝。缓存的物理介质通常是内存
     对于应用程序来说,为了提高查询效率或者提高性能,就需要考虑使用缓存。对于一些经常访问的数据进行缓存避免经常的io操作或者数据库查询所带来的效率下降是经常被使用的优化策略。hibernate也在缓存方面做了很多努力。

Hibernate中提供了两个级别的缓存:

一级缓存:
第一级别的缓存是 Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,默认开启,不可关闭,随着session的生命周期开始而开始、结束而结束; 只要Session实例没有结束生命周期,且没有清理缓存,则存放在它缓存中的对象也不会结束生命周期 。缓存的物理介质是内存。
关于session缓存的API:
session.evict(object obj):清除session缓存中的obj对象
session.clear():清除session缓存中的所有对象。
session.flush():刷新缓存, Session 按照缓存中对象的属性变化来同步更新数据库 在事务的提交方法commit实现中,也是首先调用了flush方法,也就是说每次提交事务之前是先刷新缓存,然后提交的事务。
另外值得注意的两个API:
query.list():不进行缓存,怀疑是由于hql语句的关系,后续再学习一下
query.iterate():该方法是先对数据库发送sql查询集合中所有的OID,如果后续调用集合中元素,在调用是首先通过OID在session缓存中查找对象,如果找不到才会向数据库中发送SQL语句查询。

二级缓存:
第二级别的缓存是 SessionFactory级别的缓存,它是属于进程范围的缓存。在默认情况下是不开启的,它是一个缓存插件,缓存的物理介质可以是内存也可以是磁盘。
  二级缓存是由插件支持的其配置步骤为:
  1. 加入jar包:ehcache及其依赖包
  2. 加入ehcache的配置文件到根目录。
  3. 在hibernate.cfg.xml文件中配置外部的缓存provider类
  4. 在实体类的映射文件中开启二级缓存支持。<cache>标签
完成基本步骤就可以在程序中使用二级缓存了,当然ehcache及其他二级缓存插件都提供了更强大的功能与详细的配置,比如在ehcache.xml文件中可以通过配置来控制二级缓存的很多特性:
–name:设置缓存的名字,它的取值为类的全限定名或类的集合的名字
–maxInMemory:设置基于内存的缓存中可存放的对象最大数目
–eternal:设置对象是否为永久的,true表示永不过期,此时将忽略timeToIdleSeconds和timeToLiveSeconds属性;默认值是false
–timeToIdleSeconds:设置对象空闲最长时间,以秒为单位,超过这个时间,对象过期。当对象过期时,EHCache会把它从缓存中清除。如果此值为0,表示对象可以无限期地处于空闲状态。
–timeToLiveSeconds:设置对象生存最长时间,超过这个时间,对象过期。如果此值为0,表示对象可以无限期地存在于缓存中.该属性值必须大于或等于timeToIdleSeconds属性值
–overflowToDisk:设置基于内存的缓存中的对象数目达到上限后,是否把溢出的对象写到基于硬盘的缓存中 

当然在hbm.xml文件中还包括了对应的配置:
<cache>:设定数据并发访问策略
<region>:设定缓存策略,与ehcache.xml文件中的缓存块对应

用 慕课网教程的一张表总结比较一下两者之间的区别:

关于hibernate一二级缓存的学习还有一些地方不是太明白,熟练程度也还差很多,后续希望能够增加动手机会深入学习。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值