注意session.clear()的运用,及时清理缓存,尤其在不断分页循环的时候
1、什么是一级缓存,session级别的缓存
2、什么是二级缓存,SessionFactory级别的缓存,可以跨越session存在
(1)经常被访间
(2)改动不大不会经常改动
(3)数重有限
3、打开二级缓存
(1)hibernate.cfg.xml 设定:
<property name= "cache.use_second_level_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property>
(2)@Cache注解(由hibernate扩展提供)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE(怎么使用,即可写也可读),region="缓存的名字")
public class Category {
注:使用EhCache二级缓存 需要导入ehcache-1.2.3.jar及commons-logging-1.0.4.jar包
load默认使用二级缓存,iterate默认使用二级缓存
list默认往二级缓存加数据,但是查询的时候不使用
(3)如果要query用二级缓存,需打开查询缓存(查询语句要一样)
<property name="cache.use_query_cache">true</property>
调用Query的setCachable (true)方法指明使用二级缓存
例如:session.createQuery("from Category").setCacheable(true).list();
4 缓存算法:
LRU LFU FIFO
Least Recently Used –最近很少被使用
Least Frequently Used (命中率高低)
First In First Out 按顺序替换