`
penchy
  • 浏览: 57650 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Hibernate缓存(二)

阅读更多

四、缓存的管理

  Hibernate 的缓存管理
一级缓存的管理 :
  evit(Object obj)  
将指定的持久化对象从一级缓存中清除 , 释放对象所占用的内存资源 , 指定对象从持久化状态变为脱管状态 , 从而成为游离对象 .
  clear()  
将一级缓存中的所有持久化对象清除 , 释放其占用的内存资源
  contains(Object obj)
判断指定的对象是否存在于一级缓存中 .
  flush()
刷新一级缓存区的内容 , 使之与数据库数据保持同步 .

 
二级缓存的管理 :   
   evict(Class arg0, Serializable arg1)  
将某个类的指定 ID 的持久化对象从二级缓存中清除 , 释放对象所占用的资源 .

evictCollection(String arg0)   将指定类的所有持久化对象的指定集合从二级缓存中清除 , 释放其占用的内存资源 .

 

如何避免一次性大量的实体数据入库导致内存溢出
*
flush ,再 clear

如果数据量特别大,考虑采用 jdbc 实现,如果 jdbc 也不能满足要求,可以考虑采用数据库本身的特定导入工具

 

五、什么样的数据不适合放在二级缓存中来 ?
 
下面这几种情况就不适合 加载到二级缓存中 :
  1.
经常被修改的数据
  2.
绝对不允许出现并发访问的数据
  3.
与其他应用共享的数据
 
下面这己种情况合适 加载到二级缓存中 :
  1.
数据更新频率低
  2.
允许偶尔出现并发问题的非重要数据
  3.
不会被并发访问的数据
  4.
常量数据
  5.
不会被第三方修改的数据

 

六、二级缓存的配置

Hibernate 的二级缓存功能是靠配置二级缓存插件来实现的 ,Hibernate 为了集成这些插件 ,Hibernate 提供了 org.hibernate.cache.CacheProvider 借口 , 它充当缓存插件与 Hibernate 之间的适配器 .

常用的二级缓存插件
EHCache  org.hibernate.cache.EhCacheProvider
OSCache  org.hibernate.cache.OSCacheProvider
SwarmCahe  org.hibernate.cache.SwarmCacheProvider
JBossCache  org.hibernate.cache.TreeCacheProvider

 

设置 hibernate.cache.provider_class

我们这里用 ehcache ,如
hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider
由于这是 HIBERNATE 默认的 CACHE 提供者 , 所以无须做什么设置 .

只要在 src 中添加 ehcache 的配置文件 ehcache.xml:

<ehcache>

    <diskStore path="java.io.tmpdir"/>  

  

    <defaultCache   maxElementsInMemory="10000"   eternal="false"  timeToIdleSeconds="120"          timeToLiveSeconds="120"  overflowToDisk="true"   />   

  

    <cache name="goncha.hb.bean.Person"   maxElementsInMemory="10"       eternal="false"    

        timeToIdleSeconds="100"  timeToLiveSeconds="100"  overflowToDisk="false"   />     

      <cache name="goncha.hb.bean.Address"  maxElementsInMemory="10"     eternal="false"    

        timeToIdleSeconds="100"  timeToLiveSeconds="100"  overflowToDisk="false"    />     

</ehcache> 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics