hibernate的二级缓存及hibernate 的查询缓存
2014-03-08 14:46
239 查看
1)二级缓存(参考TestCache.test2())
默认关闭。属于SessionFactory级别缓存,可以被多个不Session对象访问。启用二级缓存后查找机制:
session查对象--->一级缓存查找(on)--->二级缓存查找(off)--->数据库查找.
a)二级缓存适用环境
该对象被多个不同请求频繁访问。
该对象数据状态基本不发生改变。
例如:当当网中查看产品详细页面功能。
b)二级缓存使用方法
二级缓存实现机制非常复杂,需要考虑缓存对象更新、对象命中率等问题,因此Hibernate采用了第三方提供的二级缓存组件。
ehcache.jar二级缓存组件的使用方法:
----引入ehcache.jar组件开发包
----在src下添加ehcache.xml配置文件,用于设置二级缓存组件管理参数。
<defaultCache
maxElementsInMemory="1000" //指定内存缓存对象的最大数量
eternal="false" //指定缓存的对象是否长期有效
timeToIdleSeconds="120"//指定对象空闲时间
timeToLiveSeconds="300"//指定对象存活时间
overflowToDisk="true"//指定超出缓存数量后,是否采用磁盘存储
/>
----在hibernate.cfg.xml配置中指定开启二级缓存,并指定采用哪个二级缓存组件
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">
true
</property>
<!-- 指定二级缓存组件 -->
<property name="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</property>
----哪些类型对象需要使用二级缓存,需要在hbm.xml中设置启用
<class name="tarena.entity.Order" table="d_order">
<cache usage="read-only" region="sampleCache1"/>
<id/>...
</class>
c)二级缓存的管理方法
sessionFactory.evict(类型或对象);//移除某一类型或某个对象
sessionFactory.evictCollection();//移除集合
2)查询缓存(参考TestCache.test3())
前面一级和二级缓存都只能缓存单个对象。如果查询的是字符串、数组或集合数据,需要使用查询缓存才可以缓存下来。
a)查询缓存适用的环境
同一个SQL频繁调用.
查询结果集数据很少改变
结果集数据量不要太大
例如当当网主界面左侧类别菜单功能比较适合。
b)查询缓存的使用方法
---开启二级缓存(参考前面步骤)
---在hibernate.cfg.xml中启用查询缓存配置
<!-- 指定开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">
true
</property>
---在query.list()调用之前设置启用查询缓存机制
query.setCacheable(true);//启用查询缓存机制
默认关闭。属于SessionFactory级别缓存,可以被多个不Session对象访问。启用二级缓存后查找机制:
session查对象--->一级缓存查找(on)--->二级缓存查找(off)--->数据库查找.
a)二级缓存适用环境
该对象被多个不同请求频繁访问。
该对象数据状态基本不发生改变。
例如:当当网中查看产品详细页面功能。
b)二级缓存使用方法
二级缓存实现机制非常复杂,需要考虑缓存对象更新、对象命中率等问题,因此Hibernate采用了第三方提供的二级缓存组件。
ehcache.jar二级缓存组件的使用方法:
----引入ehcache.jar组件开发包
----在src下添加ehcache.xml配置文件,用于设置二级缓存组件管理参数。
<defaultCache
maxElementsInMemory="1000" //指定内存缓存对象的最大数量
eternal="false" //指定缓存的对象是否长期有效
timeToIdleSeconds="120"//指定对象空闲时间
timeToLiveSeconds="300"//指定对象存活时间
overflowToDisk="true"//指定超出缓存数量后,是否采用磁盘存储
/>
----在hibernate.cfg.xml配置中指定开启二级缓存,并指定采用哪个二级缓存组件
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">
true
</property>
<!-- 指定二级缓存组件 -->
<property name="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</property>
----哪些类型对象需要使用二级缓存,需要在hbm.xml中设置启用
<class name="tarena.entity.Order" table="d_order">
<cache usage="read-only" region="sampleCache1"/>
<id/>...
</class>
c)二级缓存的管理方法
sessionFactory.evict(类型或对象);//移除某一类型或某个对象
sessionFactory.evictCollection();//移除集合
2)查询缓存(参考TestCache.test3())
前面一级和二级缓存都只能缓存单个对象。如果查询的是字符串、数组或集合数据,需要使用查询缓存才可以缓存下来。
a)查询缓存适用的环境
同一个SQL频繁调用.
查询结果集数据很少改变
结果集数据量不要太大
例如当当网主界面左侧类别菜单功能比较适合。
b)查询缓存的使用方法
---开启二级缓存(参考前面步骤)
---在hibernate.cfg.xml中启用查询缓存配置
<!-- 指定开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">
true
</property>
---在query.list()调用之前设置启用查询缓存机制
query.setCacheable(true);//启用查询缓存机制
相关文章推荐
- 性能优化(一)Hibernate 利用缓存(一级、二级、查询)提高系统性能
- 说说自己对hibernate一级、二级、查询、缓存的理解。
- Hibernate的二级缓存和查询缓存
- Hibernate查询、连接池、二级缓存
- hibernate 一级缓存,二级缓存,查询缓存
- Hibernate开启了二级缓存后查询语句为什么没有被缓存
- hibernate的一级缓存、二级缓存、查询缓存
- hibernate的查询缓存和二级缓存的配合使用
- Hibernate中 一 二级缓存及查询缓存的学习总结 转帖
- Hibernate的一级缓存、二级缓存和查询缓存。
- 黑马程序员:关于hibernate一级缓存二级缓存,查询缓存
- hibernate的查询缓存和二级缓存的配合使用
- Hibernate中一级缓存、二级缓存及查询缓存的总结
- Hibernate一级缓存、二级缓存以及查询缓存的关系
- Hibernate学习之---二级缓存和查询缓存
- hibernate回顾之缓存机制-一级缓存、二级缓存、查询缓存
- Hibernate 一级缓存,二级缓存,查询缓存
- hibernate 二级缓存和查询缓存原理和关系
- hibernate:真正理解二级缓存和查询缓存
- 【Hibernate】Hibernate 利用缓存(一级、二级、查询)提高系统性能