Hibernate二级缓存攻略
http://www.java8.net 2008年08月11日 【字号:小 中 大】 收藏本文
很多人对二级缓存都不太了解,或者是有错误的认识,我一直想写一篇文章介绍一下hibernate的二级缓存的,今天终于忍不住了。
我的经验主要来自hibernate2.1版本,基本原理和3.0、3.1是一样的,请原谅我的顽固不化。
hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了。
二级缓存是SessionFactory级别的全局缓存,它底下可以使用不同的缓存类库,比如ehcache、oscache等,需要设置hibernate.cache.provider_class,我们这里用ehcache,在2.1中就是 hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider如果使用查询缓存,加上hibernate.cache.use_query_cache=true
缓存可以简单的看成一个Map,通过key在缓存里面找value。
Class的缓存
对于一条记录,也就是一个PO来说,是根据ID来找的,缓存的key就是ID,value是POJO。无论list,load还是iterate,只要读出一个对象,都会填充缓存。但是list不会使用缓存,而iterate会先取数据库select id出来,然后一个id一个id的load,如果在缓存里面有,就从缓存取,没有的话就去数据库load。假设是读写缓存,需要设置:
<cache usage="read-write"/>如果你使用的二级缓存实现是ehcache的话,需要配置ehcache.xml
<cache name="com.xxx.pojo.Foo" maxElementsInMemory="500" eternal="false" timeToLiveSeconds="7200" timeToIdleSeconds="3600" overflowToDisk="true" />其中eternal表示缓存是不是永远不超时,timeToLiveSeconds是缓存中每个元素(这里也就是一个POJO)的超时时间,如果eternal="false",超过指定的时间,这个元素就被移走了。timeToIdleSeconds是发呆时间,是可选的。当往缓存里面put的元素超过500个时,如果overflowToDisk="true",就会把缓存中的部分数据保存在硬盘上的临时文件里面。
今日更新的文章
与 "Hibernate二级缓存攻略" 相关的文章
- 暂无相关文章
让Ajax实现提示框- · 弹出提示几种方法
- · Ajax开发聊天系统
- · Ajax开发实例教程
- · XMLHttpRequest
- · 推送方式拉取方式
SAAJ解决SOA集成问题- · 框架设计模式介绍
- · Validator 验框架
- · Struts配置文件解
- · 框架配置文件实例
- · 解释器设计模式
- · 学习Java构造函数
- · Comparator的使用
- · Java相关原理理解
- · Java专业术语规范
- · Java编程学习总结
- · 浅析Java事件处理
- · Java类型提升约定
- · 抽象类和接口比较
- · Java占用内存研究
- · Java实现回调例程
- · Java线程概念描述
- · Java反射机制详解
- · Java 操作Cookie
- · 设计 Annotation
- · 初学者搞懂的问题
- · Java30个基本规则
- · Acegi 框架技术
- · 三层架构配置入门
- · 随机验证码实例
- · 使用Volatile变量