hibernate缓存



--Session缓存(一级缓存,内置)
|
HIbernate缓存 |
--SessionFactory缓存(二级缓存、包含内置和外置)



内置和外置的界定:内置缓存只能存放在内存当中,外置缓存可以存储在硬盘等外部存储设备.



根据缓存的生命周期可分为三大范围:事物范围、应用范围、集群范围


Hibernate的缓存管理

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

evict(Class arg0, Serializable arg1) 将某个类的指定ID的持久化对象从二级缓存中清除,释放对象所占用的资源.
sessionFactory.evict(Customer.class, new Integer(1));
evict(Class arg0) 将指定类的所有持久化对象从二级缓存中清除,释放其占用的内存资源.
sessionFactory.evict(Customer.class);
evictCollection(String arg0) 将指定类的所有持久化对象的指定集合从二级缓存中清除,释放其占用的内存资源.
sessionFactory.evictCollection("Customer.orders");

常用的二级缓存插件
EHCache 、OSCache 、SwarmCahe 、JBossCache


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

配置:
<hibernate-configuration>
<session-factory>
<!-- 设置二级缓存插件的Provider类-->
<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
<!-- 启动"查询缓存" -->
<property name="hibernate.cache.use_query_cache">
true
</property>
</session-factory>
</hibernate-configuration>



<hibernate-mapping>

<class>
<!-- 设置该持久化类的二级缓存并发访问策略 read-only read-write nonstrict-read-write transactional-->
<cache usage="read-write"/>
</class>

</hibernate-mapping>


优点:Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架、分布式,安全检查,集群,


负载均衡的支持


传统的架构:

1) Session Bean <-> Entity Bean <-> DB

为了解决性能障碍的替代架构:

2) Session Bean <-> DAO <-> JDBC

你可能喜欢

  • Hibernate缓存
  • hibernate缓存机制
  • JAVA编程题全集及答案
  • 入门教程
  • Java面试题
  • Excel使用技巧大全(超
  • 学习笔记

hibernate缓存相关文档

最新文档

返回顶部