您的位置:首页 > 其它

Hibernate的缓存机制

2013-01-07 00:00 232 查看
一级缓存是Session级别的缓存,属于事务范围的缓存,由Hibernate管理,当我们使用Hibernate查询数据时,都会从一级缓存中查询数据,但是不会产生查询语句,另外一级缓存是线程范围的缓存,但线程结束时,Session就会关闭;而二级缓存是SessionFactory级别的缓存,属于进程范围的缓存,只要服务器不关,SessionFactory就永远存在。

SessionFactory级别的缓存又分为两类:内置缓存和外置缓存。

内置缓存:Hibernate自带的,不可卸载。通常在Hibernate初始化阶段,Hibernate会把映射元数据(什么是映射元数据?)和预定义的SQL语句放置到sessionFactory缓存中,映射元数据是映射文件中数据的复制,而预定义SQL语句是Hibernate根据映射元数据推到出来的,该内置缓存是只读的。

外置缓存:也就是我们所说的二级缓存。一个可配置的缓存插件,在默认情况下,sessionFactory不会启用这个插件,外置缓存中的数据是数据库中数据的复制,外置缓存的介质可以是硬盘或内存。

二级缓存的区域划分:

Class Cache Region:存放的是真实实体,也就是对象,但数据是以散装数据形式的存放的。

Collection Cache Region:用Set集合来存放缓存数据,只初始化Oid,真实数据还是存放在Class Cache Region。

Query Cache Region:使用Query接口查询;用Set集合来存放缓存数据,只初始化Oid,真实数据还是存放在Class Cache Region。

Update Timestamps:不作研究

适合放入到二级缓存中的数据:很少被修改或者不是特别重要,允许偶尔发生并发问题的数据;不适合放入到二级缓存中的数据:经常被修改,不允许存在并发问题的数据,比如财务数据;再有就是与其它应用数据共享的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hibernate 缓存