Hibernate缓存分类:
Hibernate的缓存范围
事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围.
应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存或硬盘作为存储介质,二级缓存就属于应用范围.
在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式.
一级缓存的管理:
evit(Object obj)
将指定的持久化对象从一级缓存中清除,释放对象所占用的内存资源,指定对象从持久化状态变为脱管状态,从而成为游离对象.
clear()
将一级缓存中的所有持久化对象清除,释放其占用的内存资源
contains(Object obj)
判断指定的对象是否存在于一级缓存中.
flush()
刷新一级缓存区的内容,使之与数据库数据保持同步.
二级缓存的管理:
evict(Class arg0, Serializable arg1)
将某个类的指定ID的持久化对象从二级缓存中清除,释放对象所占用的资源.
1. sessionFactory.evict(Customer.class, new Integer(1));
evict(Class arg0)
将指定类的所有持久化对象从二级缓存中清除,释放其占用的内存资源.
1. sessionFactory.evict(Customer.class);
evictCollection(String arg0)
将指定类的所有持久化对象的指定集合从二级缓存中清除,释放其占用的内存资源.
1. sessionFactory.evictCollection("Customer.orders");
Hibernate的二级缓存的配置
不适合
加载到二级缓存中:
1.经常被修改的数据
2.绝对不允许出现并发访问的数据
3.与其他应用共享的数据
合适
加载到二级缓存中:
1.数据更新频率低
2.允许偶尔出现并发问题的非重要数据
3.不会被并发访问的数据
4.常量数据
5.不会被第三方修改的数据
org.hibernate.cache.EhCacheProvider
org.hibernate.cache.OSCacheProvider
org.hibernate.cache.SwarmCacheProvider
org.hibernate.cache.TreeCacheProvider
org.hibernate.cache.EhCacheProvider true " quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
1. <</span>hibernate-configuration>
2. <</span>session-factory>
3.
4. <</span>property name="hibernate.cache.provider_class">
5. org.hibernate.cache.EhCacheProvider
6. </</span>property>
7.
8. <</span>property name="hibernate.cache.use_query_cache">
9. true
10. </</span>property>
11. </</span>session-factory>
12. </</span>hibernate-configuration>
" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
1. <</span>ehcache>
2.
3. <</span>diskStore path="java.io.tmpdir"/>
4. <</span>defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/>
5. </</span>ehcache>
" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">