Hibernate_缓存技术,一,二,三级

1         listiterate不同之处(//主要为了面试  详见hibernate_2900_Hibernate_list_iterate

a)         list取所有

b)         iterate先取 ID,等用到的时候再根据ID来取对象

c)         sessionlist第二次发出,仍会到数据库査询

d)         iterate 第二次,首先找session 级缓存

2         一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache)

a)         什么是缓存

b)         什么是一级缓存,session级别的缓存

c)         I什么是二级缓存,SessionFactory级别的缓存,可以跨越session存在

                      i.        经常被访间

                  ii.        改动不大不会经常改动

               iii.        数重有限

d)         打开二级缓存

                      i.        hibernate.cfg.xml 设定:

<property

name= "cache.use_second_level_cache">true</property>

<property

name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

                  ii.        @Cache注解(hibernate扩展提供)

@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)

 

注:使用EhCache二级缓存 需要导入ehcache-1.2.3.jarcommons-logging-1.0.4.jar

e)         load默认使用二级缓存,iterate默认使用二级缓存

f)         list默认往二级缓存加数据,但是查询的时候不使用

g)         如果要query用二级缓存,需打开查询缓存

<property name="cache.use_query_cache">true</property>

调用QuerysetCachable (true)方法指明使用二级缓存

例如:session.createQuery("from Category").setCacheable(true).list();

h)         缓存算法:(纯为了面试)

                      i.        LRU  LFU  FIFO

1.             Least Recently Used 最近很少被使用

2.             Least Frequently Used (命中率高低)

3.             First In First Out 按顺序替换

                  ii.        memoryStoreEvictionPolicy = "LRU" (ehcache.xml中配置)

你可能感兴趣的:(Hibernate,面试)