-
hibernate的缓存策略(ppt内容)
1.什么是缓存?:并不是指计算机的内存或者CPU的一二级缓存
缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略
2.为什么使用缓存?
ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和优化ORM框架的执行效率至关重要。
Hibernate的缓存是提升和优化Hibernate执行效率的重要手段,所有学会Hibernate缓存的使用和配置是优化的关键。
3.缓存的工作原理
一级缓存
1.Hibernate一级缓存又称为“Session缓存”、“会话级缓存”。
2.通过Session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而从内存中获取,这就是缓存。
3.一级缓存的生命周期和Session相同;Session销毁,它就销毁。
4.一级缓存中的数据可适用范围在当前会话之内。
一级缓存的API的API
一级缓存无法取消,用二个方法管理。
evict():用于将某个对象从session的一级缓存中清除
clear():用于将一级缓存中的所有对象全部清除
用法:
一级缓存也有些时候会对程序的性能产生影响
二级缓存
二级缓存又称为“全局缓存”、“应用级缓存”
二级缓存中的数据可适用范围是当前应用的所有会话
二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件如:Hashtable、OSCache、SwarmCache、JBoss TreeCache等
二级缓存的配置步骤
1.添加二级缓存对应的jar包
ehcache.jar.zip
2.在hibernate的配置文件中添加Privider类的描述
3.添加二级缓存的属性配置
hibernate.cfg.xml中
4.在需要被缓存的表所对应的映射文件中添加<cache/>标签
<cache/>标签的详细介绍:
usage:指定缓存策略,可选的策略包括:transactional,read-write,nonstrict-read-write或read-only(只读)
region:指定二级缓冲区域名
include:指定是否缓存延迟加载的对象;all,表示缓存所有对象;non-lazy,表示不缓存延迟加载的对象
总结:
在通常情况下会将具有以下特征的数据放入到二级缓存中
很少被修改的数据。
不是很重要的数据,允许出现偶尔并发的数据。
不会被高并发访问的数据。
参考数据。
Hibernate的缓存能提高检索效率
Hibernate的缓存分为一级缓存和二级缓存。一级缓存是会话级缓存,二级缓存是应用级缓存。
Hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所有要注意缓存的使用策略。
查看全部 -
hibernate缓存策略的总结
查看全部 -
一二级缓存对比
查看全部 -
一级缓存的常用方法:
一级缓存无法取消,可以调用方法进行管理
//evict方法清除一级缓存中的指定对象 session.evict(emp); //clear方法清空session中的所有内容 session.clear();
Query query = session.createQuery("from Employee"); List list = query.list();//不会使用session缓存,但是能够产生缓存,每次都会到数据库进行查询 Iterator iterator = query.iterator();//先查询所有对象的主键ID,根据ID去 缓存中进行查询,如果能够查询到直接返回,查询不到则查询数据库
查看全部 -
一级缓存的生命周期和session相同
一级缓存的数据的适用范围只能使用在当前会话之内
查看全部 -
一级缓存也称session缓存
同一个session进行两次相同的查询会默认使用缓存,即第二次查询不会查询数据库,只发送一条sql语句,第二次查询是直接从session缓存中获取的
session缓存中,对持久化的每个实例都对应一个OID,当OID一致时,即不进行数据库查询,直接从缓存中获取数据即可
不同的session即便查询的是同一个实例,也会发出两条sql语句
查看全部 -
缓存的工作原理
缓存是直接存储在内存当中,访问速率比较高,当应用程序对数据进行访问的时候,首先会查看缓存当中是否包含数据,如果包含则直接调用,如果不包含,则再查询数据库;同时将查询到的数据返回给应用程序,也会重新放到缓存当中,供下次查询缓存使用
查看全部 -
hibernate一二级缓存的对比
查看全部 -
cache标签的属性配置
查看全部 -
二级缓存配置:
添加ehcache.jar、commons-logging.jar
在hibernate.cfg.xml中添加:
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
在实体类的.hbm.xml文件中配置cache标签
查看全部 -
二级缓存应用
查看全部 -
一级缓存的API
查看全部 -
Hibernate一级缓存
查看全部 -
使用不同的Session对象分别查询一次,两次都会发送SQL语句
查看全部 -
同一个Session对象执行两次get方法,如果是同一条数据,只会在第一次发送SQL语句,第二次直接在缓存中取。
查看全部
举报