SSH(四)---Hibernate缓存机制

注:本文是答4.hibernate一级缓存和二级缓存 的,仅为了自己学习,向原博主致敬。

原博文网址:http://www.cnblogs.com/sunniest/p/4646515.html

一、why(为啥需要Hibernate缓存?)

Hibernate是一个数据持久化框架,经常访问物理数据库。
为了降低应用程序访问物理数据源的频次(频繁的网络传输、数据库磁盘读写操作都会大大降低系统的整体性能),从而提高应用程序的性能。
缓存内的数据是对物理数据源中数据的复制,应用程序运行时首选从缓存中读取数据,在特定的时刻或事件会同步缓存和物理数据源中的数据。
二、what(Hibernate缓存原理是怎样的?)
Hibernate缓存分为两层:Hibernate的一级缓存和Hibernate二级缓存。
1.Hibernate一级缓存(Session的缓存):
(1)Session实现了第一级Cache,属于 事务级数据缓冲。一旦事务结束,缓存随之失效。一个Session的生命周期对应一个数据库事务或一个程序事务。
(2)Session-Cache总是被打开并且不能被关闭的。
(3)Session-Cache保证一个Session中两次请求同一个对象时,取得的对象是同一个Java实例,有时它可以避免不必要的数据冲突。
    a.在对于同一个对象进行循环引用时,不至于产生堆栈溢出。
    b.当数据库事务结束时,对于同一数据表行,不会产生数据冲突。因为对于数据库中的一行,最多有一个对象来表示它。
    c.一个事务中可能会有很多个处理单元,在每一个处理单元中做的操作都会立即被其他的数据单元得知。

2.Hibernate二级缓存(SessionFactory的缓存):
(1)二级缓存是SessionFactory范围内的缓存,所有的Session共享同一个二级缓存。在二级缓存中保存持久化实例的散装形式的数据。
(2)持久化不同的数据需要不同的Cache策略,比如一些因素将影响Cache策略的选择:数据的读/写比例、数据表是否能被其他的应用程序所访问等。
(3)设置Hibernate二级缓存需要分两步: 首先,确认使用什么数据并发策略。然后,配置缓存过期时间并设置Cache提供器。
有4种内置的Hibernate数据并发冲突策略,代表了数据库隔离等级。具体如下:
a.事务: 适用很少更新的数据。
b.读写:适用很少更新的数据。
c.非严格读写:不保证Cache和数据库中的之间的数据一致性。使用该策略时,应该设置足够短的缓存过期时间,否则可能从缓存中读取脏数据。
d.只读:数据永不改变。
(4)Hibernate高效的Cache提供器,它将作为插件被Hibernate调用。Hibernate允许使用的缓存插件举例:
a.EhCache:可以在JVM中作为一个简单进程范围内的缓存,它可以把缓存的数据放入内存或磁盘,并支持Hibernate中可选用的查询缓存。
b.JBossCache:可作为集群范围的缓存,但不支持查询缓存。

什么样的数据适合存放到第二级缓存中?   
1) 很少被修改的数据   
2) 不是很重要的数据,允许出现偶尔并发的数据   
3) 不会被并发访问的数据   
4) 常量数据   
不适合存放到第二级缓存的数据?   
1) 经常被修改的数据   
2) 绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发   
3) 与其他应用共享的数据。

三、Hibernate查找对象如何应用缓存?
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;
查不到,如果配置了二级缓存,那么从二级缓存中查;
如果都查不到,再查询数据库,把结果按照ID放入到缓存删除、更新、增加数据的时候,同时更新缓存。

具体使用示例可参考:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html(对该博主表示感谢!!)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值