Hibernate的缓存机制
来源:互联网 发布:java jsonarray 编辑:程序博客网 时间:2024/05/16 18:32
Hibernate有俩种缓存形式,分别是一级缓存和二级缓存。通常客户端程序会先访问一级缓存,找不到相应内容再访问二级缓存。但是一级缓存是hibernate自动生成的通常不需要手动配置,而二级缓存需要开发人员手动配置。
1. 一级缓存:
Hibernate的一级缓存在session对象内部维护了一个Map,Map的(key,value)分别对应pojo类实例化对象的(sid,对象的引用)。
当我们在hibernate程序中第一次插入或查询时,hibernate会自动将查询到的结果(持久化对象)存放在session的一级缓存里,当我们再次查询数据库的该内容时,hibernate会自动从一级缓存中取数据,而不再去与数据库进行交互,从而提高了数据访问效率。
值得关注的是session的生命周期,当前的事务一旦提交(调用transaction的commit ()方法),当前session就会关闭,此时session所维护的一级缓存也会被清除。
一级缓存可以保证缓存对象与数据库中相关记录的同步,若缓存对象的某些属性发生改变时(调用该对象属性的set方法),session不会立即执行相关的update语句,而在session调用commit()时将多条相关的更新语句合并为一条update语句。
2. 二级缓存
二级缓存是维护在SessionFactory里面,是可以被所有的程序共享(进程级别的缓存),二级缓存如果数据量过大,它还可以将数据存在磁盘上。二级缓存中存放的对象的散装数据(属性)。
Hibernate二级缓存需要我们手动配置。
首先在hibernate.cfg.xml添加以下代码:
<!--hibernate4.0配置二级缓存的实现 -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.cache.EhCacheRegionFactory</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<!--当使用query,criteria查询,想使用二级缓存还需开启查询缓存功能 -->
<propertyname="hibernate.cache.use_query_cache">true</property>
然后还需要在pojo类的映射文件里面进行如下配置:
<!--设置并发访问策略 -->
<cacheusage="read-only"/>
我们可以选择适合并发访问策略(一般来说选择read-only即可)
最后我们还需要新建一个ehcache.xml文件,通常可以在hibernate下载包里找到一个附带的例子,这个是我的hibernate下载包里带的例子:
<ehcache>
<diskStorepath="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
<cachename="pojo.Students"
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="10"
timeToLiveSeconds="120"
overflowToDisk="true"
/> -->
</ehcache>
最后还需要导包,将hibernate下载包里的ehcache.jar文件导入。
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- HIBERNATE的缓存机制
- HIBERNATE的缓存机制
- HIBERNATE的缓存机制
- 5.time
- Python实现互联网笔试题-百度1、2
- hdu 5236 Article 概率dp
- 秒杀多线程第七篇 经典线程同步 互斥量Mutex
- CSDN-markdown编辑器用法
- Hibernate的缓存机制
- PHP简易商城(一)概述
- CodeForces.71A Way Too Long Words (水模拟)
- OCR识别技术,车牌识别流程与重要性
- 秒杀多线程第八篇 经典线程同步 信号量Semaphore
- 利用TortoiseGit(小乌龟)将项目上传至GitHub网站
- 输入1个数输出其二进制表示中1的个数
- Node js 项目启动报错,错误码,events.js:141,throw er; //Unhandled 'error' event,解决办法
- 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量