Hibernate缓存

1.缓存概念

  • 并不是指计算机的CPU一二级缓存或者内存
  • 缓存是指为了降低应用程序访问物理数据源的频次,从而提高应用程序性能的一种策略

2.为什么要使用缓存?

  • ORM框架访问数据库的效率直接影响应用程序性能,
  • 通过使用缓存,优化ORM框架的执行效率显得尤为重要。

3.缓存的一般工作原理

  • 应用程序-->缓存8
  • 命中:返回结果到应用程序中
  • 未命中:向数据库查询数据并添加到缓存中-->返回结果到应用程序


4.一级缓存

  • 一级缓存,也被称为"Session缓存","会话级缓存"
  • 一级缓存生命周期和Session相同,当Session销毁时,一级缓存也销毁
  • 一级缓存的作用范围为当前会话
 
  • 第二次查询同一个对象时不会再进行数据库查询,而是从缓存中取出
  • 在不同session中多次查询同一个对象时,会执行多次查询
  • 一级缓存中,持久化类对象的每个实例都具有唯一的OID
 
默认开启一级缓存,使用以下两个方法管理
  1. evict():将某个对象从一级缓存中清除。
  2. clear():将一级缓存中所有对象清除。
 
4.二级缓存
 
1)添加对应jar包
 
2)在配置文件中添加Provider类的描述
 
  • hibernate 3.3配置二级缓存
  <property name="hibernate.cache.use_second_level_cache">true</property>
  <property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
  • hibernate 4.0以后配置
  <property name="hibernate.cache.use_second_level_cache">true</property>
  <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
 
3)添加二级缓存的属性配置文件
 
< cache
  name:cache唯一标识
  eternal:缓存是否永久有效
  maxElementsInMemory:内存中最大缓存对象数
  overflowToDisk(true,false):缓存对象达到最大数后,将缓存写到硬盘中
  diskPersistent:硬盘持久化
  timeToIdleSeconds:缓存清除时间
  timeToLiveSeconds:缓存存活时间
  memoryStoreEvictionPolicy:缓存清空策略
  1.FIFO:first in first out 先讲先出
  2.LFU: Less Frequently Used 一直以来最少被使用的
  3.LRU:Least Recently Used 最近最少使用的
/>
 
4.在被需要缓存的表对应映射文件中添加<cache/>标签
 
usage:指定缓存策略(transactional,read-write,nonstrict-read-write,read-only)
include:指定是否魂村延迟加载的对象(all表示缓存所有对象)
region:指定二级缓存区域名
non-lazy:表示不存延迟加载的对象
 
5)哪些情况可以使用二级缓存
 
  • 修改频次少的数据
  • 不是很重要的数据(允许偶尔出现并发的数据)
  • 不会被高并发访问的数据
  • 参考性数据
 
5.区别
  • 一二级缓存的对比
缓存范围
  • 事务范围,每个事务都有单独的一级缓存。
  • 应用范围,当前应用下所有事务共享缓存
 
并发访问策略
  • 没有并发访问策略
  • 必须提供适当并发访问策略
 
数据过期策略
  • 没有数据过期侧罗
  • 缓存对象的最大数目,最长时间,最长空闲时间。
 
缓存的软件实现
  • 框架自带
  • 第三方,插拔集成
 
物理介质
  • 内存
  • 内存和硬盘
 
启用方式
  • 默认启动,不可关闭。
  • 默认不启动,选择性开启。
 
  • query.list()和query.iterate()区别
 
1.返回的类型不同:
  •      list()返回List;
  •      iterate()返回Iterate。
 
2.查询策略不同:
  •      list()直接发送sql语句,查询数据库;
  •      iterate()发送sql语句,从数据库取出id,然后先从缓存中根据id查找对应信息,有就返回结果,没有就根据id发送sql语句,查询数据库。
 
3.返回对象不同:
  •      list()返回持久化实体类对象;
  •      iterate()返回代理对象。
 
4.与缓存的关系不同:
  •      list()只缓存,但不使用缓存;
  •      iterate()会使用缓存
 
5.缓存总结
 
  1. Hibernate的缓存能够提升检索效率。
  2. Hibernate有会话级缓存,一级缓存;应用级缓存,二级缓存。
  3. Hibernate缓存在提高检索的同时,也会增加资源消耗,需要注意使用缓存策略。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值