Hibernate 性能优化

来源:互联网 发布:剑灵灵剑捏脸数据导入 编辑:程序博客网 时间:2024/06/06 00:02

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’则淘汰。

0 0
原创粉丝点击