Hibernate缓存学习笔记
来源:互联网 发布:投资公司让干网络销售 编辑:程序博客网 时间:2024/05/23 15:35
Hibernate在进行数据读取时会先在缓存里找,缓存中不存在时再去数据库查询,合理使用hibernate缓存能够有效的利用内存,减少物理数据库调用的次数.
ORM缓存策略
1.事务级缓存(session level cache)
session生命周期的缓存,关闭session即消亡
2.应用级/进程级缓存(sessionFactory level cache)
某个应用中的共享缓存,多个事务可以共享,在sessionFactory层实现,所有sessionFactory创建的session可以共享.
3.分布式缓存
多个JVM共享的缓存,通过远程机制实现缓存数据同步,任意实例修改数据,所有的JVM都要更新缓存.
Hibernate数据缓存
1.内部缓存(session level)一级缓存
是事务级的缓存,session中维护的一个Map,Map的key是包含了数据类型和id,从数据库加载的数据都会进入Map缓存中,通过session加载数据时会先在session缓存里找,一级缓存是session的private数据,session实例消亡就清除了,在应用中就保持在一次请求的开始和结束之间.
一般由Hibernate自动维护,也支持手动维护
session.evit(Object obj) 将持久化对象从一级缓存中清除.
session.clear() 清空一级缓存
session.contains(Object obj) 判断指定的对象是否存在于一级缓存中.
session.flush() 刷新一级缓存区的内容,使缓存与数据库数据保持同步.
2.二级缓存(sessionFactory level)
包含了应用级和分布式的缓存,由本sessionFactory的所有session实例共享,session操作时会先查一级缓存,然后查二级缓存,最后再查物理数据库.要使用二级缓存必须要进行配置.
适合用缓存的数据
1.不会被其他应用修改
包括直接用JDBC修改等,因为其他应用修改了数据之后hibernate并不知道,不能自动更新缓存,不过可以手动更新缓存
2.数据大小可以接受,毕竟内存资源也不多
3.数据更新频率低(比如数据字典等常量数据)
4.可能被系统频繁使用
5.非关键的数据
6.不会被并发访问的数据
常用的二级缓存插件
EHCache org.hibernate.cache.EhCacheProvider
OSCache org.hibernate.cache.OSCacheProvider
SwarmCahe org.hibernate.cache.SwarmCacheProvider 提供了分布式
JBossCache org.hibernate.cache.TreeCacheProvider 提供了分布式
EHCache二级缓存配置方法
1.启用二级缓存首先要在hibernate.cfg.xml配置
<hibernate-configuration> <session-factory> <!-- 配置二级缓存插件EHCache的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>
2.然后配置cache的配置文件ehcache.xml
<ehcache> <!-- maxElementsInMemory为缓存对象的最大数目,eternal设置是否永远不过期,timeToIdleSeconds对象处于空闲状态的最多秒数,timeToLiveSeconds对象处于缓存状态的最多秒数,overflowtodisk内存不足时是否启用磁盘缓存 --> <diskStore path="java.io.tmpdir"/> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/></ehcache>
3.最后要在映射文件***.hbm.xml中指定实体的缓存同步策略
<?xml version="1.0" encoding='UTF-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <class> <!-- 设置该持久化类的二级缓存并发访问策略--> <cache usage="read-write"/><set name = "xxx"><cache usage="read-only" /> </set> </class></hibernate-mapping>
hibernate提供的缓存同步策略,可以在usage中设置
read-only
只读
nonstrict-read-write
更新频率不高
read-write
严格可读写
transactional(Ecache不支持)
事务型缓存
- Hibernate缓存学习笔记
- Hibernate缓存学习笔记
- Hibernate学习笔记之缓存
- Hibernate学习笔记----session缓存
- Hibernate缓存机制学习笔记
- Hibernate学习笔记-----------缓存的知识
- hibernate学习笔记(session一级缓存)
- hibernate缓存机制(学习笔记)
- Hibernate学习笔记之三种缓存
- Hibernate学习笔记(4)之缓存
- hibernate学习笔记5 ------ 缓存,注解
- hibernate学习笔记03----一级缓存
- 【Hibernate学习笔记】Session清空缓存与清理缓存
- Hibernate学习笔记之session缓存(一级缓存)
- Hibernate学习笔记(六)--管理Hibernate的缓存
- Hibernate学习笔记(三) — Hibernate 的一级缓存意义
- Hibernate 缓存--笔记
- Hibernate缓存机制笔记
- 【杭电】[2049]不容易系列之(4)——考新郎
- UVa 1220 Party at Hali-Bula dp:树的最大独立集
- 写了个MySQL数据备份小工具,放出来跟大家分享一下,欢迎拍砖。
- 转:静态方法是实例方法的区别
- MYSQL语句对于limit常用用法的讲解
- Hibernate缓存学习笔记
- Hibernate的SaveOrUpdate方法
- 软件编程21法则
- 和小强学移动app测试2】移动终端app测试点归纳(持续更新)
- 解决struts2过滤器冲突的简单方法
- 第一行代码-13.1 全局获取Context的技巧
- eclipse突然报了com/genuitec/eclipse/j2eedt/core/J2EEProjectUtil 错误
- DOCTYPE不可怕,但把它拿走,会让你怕了又怕
- 去除JSP页面自动生成的空行