Session: 一级缓存
sessionFactory: 二级缓存
查询缓存: 三级缓存
一级缓存缓存实体对象
Iterator 和 list的区别
Iterator刚开始取主键,任何时候用到才取出来,所以Iterator利用缓存,不会发出查询实体的sql(from)
List不会利用缓存,每次用到都会发出sql
Session消亡的时候,缓存消亡
查询缓存Query.setCacheable(true).list()
EhCache 配置文件hibernate-distribution-3.3.2.GA\project\etc\ehcache.xml
<defaultCache
maxElementsInMemory="10000" //最多多少个对象
eternal="false" //内存对象的永久性
timeToIdleSeconds="120" //期限(对象不活动的期限)
timeToLiveSeconds="120" //生存期
overflowToDisk="true" /> // 缓存满时,放到硬盘<diskStorepath="java.io.tmpdir"/>
EhCache.jar
hibernate-distribution-3.3.2.GA\lib\optional\ehcache
XML:<property name=” hibernate.cache.use_second_level_cache”>true </property>
<property name=” hibernate.cache.provider_class”> org.hibernate.cache.EhCacheProvider </property>
Annotation: 在class设置@Cache(usage= CacheConcurrencyStrategy.READ_WRITE )
缓存算法
l 最佳(optimal)置换算法: 选择那些永不使用的,或者是在最长时间内不再被访问的页面置换出去.即要确定哪一个页面是未来最长时间内不再被访问
l 先进先出(FIFO): 利用队列,先进先出
l 最近最久未使用置换算法LRU (Least Recently Used): 系统在每个页面设置一个访问字段,用以记录这个页面自上次被访问以来所经历的时间T,重复访问时重新设为0,选择T最大的页面淘汰。利用栈实现,栈底的T最大.
l 最近未用置换NUR(Not UsedRecently): 为每个页面置一个访问位,将内存中的所有页面都通过链接指针链成一个循环队列。当某页被访问的时,若为‘1’,暂不换出此页,置为‘0’。如果是‘0’则淘汰。