Hibernate 缓存设计

缓存设计原理:

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

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

 

Hibernate的缓存分为两级:

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

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

 

 

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

 

一级缓存默认是开启的。

一级缓存在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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值