Hibernate 缓存设计

缓存设计原理:

第一次查询的时候需要查询数据库,把查询的结果放到一个Map中。

第二次查询的时候直接查Map,如果Map中有此数据,就直接用此数据,如果没有再放到Map中。

Hibernate的缓存分为两级:

一级缓存是Session级别的缓存。

二级缓存是SessionFactory级别的缓存。

一、一级缓存(Session级别):

扫描二维码关注公众号,回复: 841034 查看本文章

一级缓存默认是开启的。

一级缓存在Session关闭的时候就会消失,在Session还没关闭之前一级缓存默认存在。

即:作用范围在Session开启和关闭之间。范围很小。

Session的save,update,saveOrUpdate,load,get,list,iterate,lock这些方法都会把对象放在一级缓存中。一级缓存不能控制缓存的数量,所以当大批量操作数据时可能会造成内存溢出。可以使用session.evict(object),session.clear()方法清除缓存中的内容。

Query,Criteria这两个接口查询数据时,不会使用一级缓存。

二、二级缓存(SessionFactory):

Hibernate将二级缓存交给了第三方来开发。

二级缓存生命周期长。

二级缓存需要在Hibernate的配置文件中来配置。

Session的save(不适合native生成主键),update,saveOrUpdate,list,iteraror,get,load,以及Query,Criteria都会填充二级缓存

1、设置是否需要打开二级缓存(默认为真):hibernate.cache.use_second_level_cache

值包括:

true

false

2、第三方缓存的提供者:hibernate.cache.provider_class

值包括:

org.hibernate.cache.EhCacheProvider
org.hibernate.cache.EmptyCacheProvider
org.hibernate.cache.HashtableCacheProvider
org.hibernate.cache.TreeCacheProvider
org.hibernate.cache.OSCacheProvider (较多使用)
org.hibernate.cache.SwarmCacheProvider

因为有了第三方缓存的提供者,因此在使用二级缓存时,Hibernate就可以不再去配置缓存的大小等等参数。可以由第三方缓存提供者通过配置文件来提供。

3、在Hibernate的配置文件中使用<class-cache class="" usage="">来配置对哪些类进行二级缓存。

4、Query二级缓存查询配置(默认是打开的):hibernate.cache.use_query_cache

值包括:

true

false

猜你喜欢

转载自tianhei.iteye.com/blog/1039935