{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
一级缓存是session级别的缓存,hiberante来管理的,这个一般不用管,
二级缓存是sessionfactory级别的,可以进行配置和更改,加载卸载
一级缓存的管理
当应用程序调用session的save()、update()、savaeorupdate()、get()或load(),以及调用查询接口的list()、iterate()方法时,如果在session缓存中还不存在相应的对象,hibernate就会把该对象加入到第一级缓存中。当清理缓存时,hibernate会根据缓存中对象的状态变化来同步更新数据库。
session为应用程序提供了两个管理缓存的方法:
evict(objectobj):从缓存中清除参数指定的持久化对象。
clear():清空缓存中所有持久化对象。
二级缓存的管理
hibernate的二级缓存策略的一般过程如下:
1)条件查询的时候,总是发出一条select*fromtable_namewhere….(选择所有字段)这样的sql语句查询数据库,一次获得所有的数据对象。
2)把获得的所有数据对象根据id放入到第二级缓存中。
3)当hibernate根据id访问数据对象的时候,首先从session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照id放入到缓存。
4)删除、更新、增加数据的时候,同时更新缓存。
什么样的数据适合存放到第二级缓存中?
1很少被修改的数据
2不是很重要的数据,允许出现偶尔并发的数据
3不会被并发访问的数据
4参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。
不适合存放到第二级缓存的数据?
1经常被修改的数据
2财务数据,绝对不允许出现并发
3与其他应用共享的数据。
使用ehcache配置二级缓存
步骤:
1)把ehcache-1.2.3.jar加入到当前应用的classpath中。
2)在hibernate.cfg.xml文件中加入ehcache缓存插件的提供类。
org.hibernate.cache.ehcacheprovider
3)拷贝ehcache.xml文件到类路径(项目工程的src目录下),这个文件在hibernate安装目录的etc下
在需要缓存的实体bean配置文件中加入缓存配置项
"-//hibernate/hibernatemappingdtd3.0//en"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
not-null="true"type="string"/> class="com.tfsoftware.hibernate.model.employee"/> 说明:usage说明了缓存的策略,region指定缓存的区域名 ehcache默认的配置文件ehcache.xml(放在类路径下) timetoidleseconds="120" timetoliveseconds="180" diskpersistent="false" diskexpirythreadintervalseconds="60"/> maxelementsinmemory="100" eternal="false" overflowtodisk="true" timetoidleseconds="300" timetoliveseconds="600" diskpersistent="false"/> ehcache默认的配置文件ehcache.xml 说明: defaultcache节点为缺省的缓存策略 maxelementsinmemory内存中最大允许存在的对象数量 eternal设置缓存中的对象是否永远不过期 overflowtodisk把溢出的对象存放到硬盘上 timetoidleseconds指定缓存对象空闲多长时间就过期,过期的对象会被清除掉 timetoliveseconds指定缓存对象总的存活时间 diskpersistent当jvm结束是否持久化对象 diskexpirythreadintervalseconds指定专门用于清除过期对象的监听线程的轮询时间 二级缓存: