Hibernate缓存策略
什么是缓存?
并不是指计算机的内存或者CPU的一,二级缓存。
缓存是指为了降低应用程序对物理数据源访问的频次,
从而提高应用程序的运行性能的一种策略。
为什么使用缓存?
ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和
优化ORM框架的执行效率至关重要。
Hibernate的缓存是提升和优化Hibernate执行效率的重要手段,
所以学会Hibernate缓存的使用和配置是优化的关键。
1.第二次查询同一个对象时,并没有再次执行数据库查询
2.在不同的Session中多次查询同一对象时,全执行多次数据库查询。
3.一级缓存中,持久化类的每个实例都具有唯一的OID.
介绍Hibernate一级缓存
1.Hibernate一级缓存又称为“Session缓存”,“会话级缓存”;
2.通过Session从数据库查询实体时会把实体在内存中存储起来,
下一次查询同一实体时不再从数据库获取,而从内存中获取,这就是缓存。
3.一级缓存的生命周期和Session相同;Session销毁,它也销毁。
4.一级缓存中的数据可适用范围在当前的会话之内。
Hiberante一级缓存的API:
一级缓存无法取消,用两个方法管理。
evict():用于将某个对象从Session的一级缓存中清除。
clear():用于将一级缓存中的所有对象全部清除。
一级缓存也有些时候会对程序的性能 产生影响。
Query query = session.createQuery(" from Employee");
List<Employee> list = query.list();
此方法没是不会使用到一级缓存的机制。
Iterator iter = query.iterate();
此方法是使用到了一级缓存的机制。
提出问题,如何解决?
有些常用的数据,在一个Session中缓存后,我们希望其它
Session中能够直接使用,而不用再次缓存怎么办?
使用更高级的二级缓存,每个Session共用的缓存。
二级缓存的配置步骤:
1.添加二级缓存对应的JAR包
2.添加二级缓存的属性配置文件
ehcache.xml
maxElementsInMemory="10000",表示缓存中允许创建的最大的对象数
eternal="false", 表示缓存中对象是否为永久的
timeToIdleSeconds="300", 表示缓存数据饨化时间(即对象在它过期前的空闲时间)
timeToLiveSeconds="600", 表示缓存数据生存时间(即对象在它过期前的生存时间)
overflowToDisk="true", 表示溢出之后是否存储在硬盘上。
3.在hibernate的配置文件中添加Provider类的描述。
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
4.在需要被缓存的表所对应的映射文件中添加<cache/>标签。
<cache usage="read-only" include="all" regin="二级缓存区域名"/>
<cache/>标签的详细介绍:
usage:指定缓存策略,可选的策略包括:transactional,read-write,
nonstrict-read-write或read-only
regin:指定二级缓存区域名
include:指定是否缓存延迟加载的对象。
all:表示缓存所有的对象。
non-lazy:表示不缓存延迟加载的对象。
-----------------------------------------------
二级缓存的介绍:
1.二级缓存又称为“全局缓存”、“应用级缓存”
2.二级缓存中的数据可适用的范围是当前应用的所有会话。
3.二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件:
如:Hashtable,OSCache,SwarmCache,JBoss TreeCache等。
======================================================
在通常情况下全将具有以下特征的数据放入到二级缓存中
1.很少被修改的数据。
2.不是很重要的数据,允许出现偶尔并发的数据。
3.不会被并发访问的数据。
4.参考数据。
--------------------------------------
一,二级缓存的对比:
一级缓存 二级缓存
缓存的范围 事务范围,每个事务都拥有单独一级缓存; 应用范围,当前应用内所有事务共享
并发访问策略 不会出现并发问题 必须提供适当的并发访问策略
数据过期策略 没有数据过期策略 缓存对象的最大数目,最长时间,最长空闲等
缓存的软件实现 框架包含 第三方提供,可插拔集成
物理介质 内存 内存和硬盘
启用方式 默认启用,不可关闭 默认不启用,选择性的开启
-------------------------------------------------
总结:
1.Hibernate的缓存能提高检索效率;
2.Hibernate的缓存分为一级缓存和二级缓存。一级缓存是会话级缓存,二级缓存是应用级缓存。
3.Hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以要注意缓存的使用策略。
------------------------------------------
什么是缓存?
并不是指计算机的内存或者CPU的一,二级缓存。
缓存是指为了降低应用程序对物理数据源访问的频次,
从而提高应用程序的运行性能的一种策略。
为什么使用缓存?
ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和
优化ORM框架的执行效率至关重要。
Hibernate的缓存是提升和优化Hibernate执行效率的重要手段,
所以学会Hibernate缓存的使用和配置是优化的关键。
1.第二次查询同一个对象时,并没有再次执行数据库查询
2.在不同的Session中多次查询同一对象时,全执行多次数据库查询。
3.一级缓存中,持久化类的每个实例都具有唯一的OID.
介绍Hibernate一级缓存
1.Hibernate一级缓存又称为“Session缓存”,“会话级缓存”;
2.通过Session从数据库查询实体时会把实体在内存中存储起来,
下一次查询同一实体时不再从数据库获取,而从内存中获取,这就是缓存。
3.一级缓存的生命周期和Session相同;Session销毁,它也销毁。
4.一级缓存中的数据可适用范围在当前的会话之内。
Hiberante一级缓存的API:
一级缓存无法取消,用两个方法管理。
evict():用于将某个对象从Session的一级缓存中清除。
clear():用于将一级缓存中的所有对象全部清除。
一级缓存也有些时候会对程序的性能 产生影响。
Query query = session.createQuery(" from Employee");
List<Employee> list = query.list();
此方法没是不会使用到一级缓存的机制。
Iterator iter = query.iterate();
此方法是使用到了一级缓存的机制。
提出问题,如何解决?
有些常用的数据,在一个Session中缓存后,我们希望其它
Session中能够直接使用,而不用再次缓存怎么办?
使用更高级的二级缓存,每个Session共用的缓存。
二级缓存的配置步骤:
1.添加二级缓存对应的JAR包
2.添加二级缓存的属性配置文件
ehcache.xml
maxElementsInMemory="10000",表示缓存中允许创建的最大的对象数
eternal="false", 表示缓存中对象是否为永久的
timeToIdleSeconds="300", 表示缓存数据饨化时间(即对象在它过期前的空闲时间)
timeToLiveSeconds="600", 表示缓存数据生存时间(即对象在它过期前的生存时间)
overflowToDisk="true", 表示溢出之后是否存储在硬盘上。
3.在hibernate的配置文件中添加Provider类的描述。
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
4.在需要被缓存的表所对应的映射文件中添加<cache/>标签。
<cache usage="read-only" include="all" regin="二级缓存区域名"/>
<cache/>标签的详细介绍:
usage:指定缓存策略,可选的策略包括:transactional,read-write,
nonstrict-read-write或read-only
regin:指定二级缓存区域名
include:指定是否缓存延迟加载的对象。
all:表示缓存所有的对象。
non-lazy:表示不缓存延迟加载的对象。
-----------------------------------------------
二级缓存的介绍:
1.二级缓存又称为“全局缓存”、“应用级缓存”
2.二级缓存中的数据可适用的范围是当前应用的所有会话。
3.二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件:
如:Hashtable,OSCache,SwarmCache,JBoss TreeCache等。
======================================================
在通常情况下全将具有以下特征的数据放入到二级缓存中
1.很少被修改的数据。
2.不是很重要的数据,允许出现偶尔并发的数据。
3.不会被并发访问的数据。
4.参考数据。
--------------------------------------
一,二级缓存的对比:
一级缓存 二级缓存
缓存的范围 事务范围,每个事务都拥有单独一级缓存; 应用范围,当前应用内所有事务共享
并发访问策略 不会出现并发问题 必须提供适当的并发访问策略
数据过期策略 没有数据过期策略 缓存对象的最大数目,最长时间,最长空闲等
缓存的软件实现 框架包含 第三方提供,可插拔集成
物理介质 内存 内存和硬盘
启用方式 默认启用,不可关闭 默认不启用,选择性的开启
-------------------------------------------------
总结:
1.Hibernate的缓存能提高检索效率;
2.Hibernate的缓存分为一级缓存和二级缓存。一级缓存是会话级缓存,二级缓存是应用级缓存。
3.Hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以要注意缓存的使用策略。
------------------------------------------