资源描述:
《hibernate 二级缓存总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、缓存可以简单的看成一个Map,通过key在缓存里面找value。 一、缓存简介 CacheInHibernateHIBERNATE中的CACHE有两级.一级是在Session范围内的CACHE.即每个Session有自己的一个CACHE,当前操作的对象都会被保留在CACHE中.但是Session关闭后这个CACHE也就没有.可见这级CACHE的生命期是很短的.(使用id进行关键字存储:缓存的key就是ID,value是POJO)(缓存的是实体对象)另一级CACHE是在SessionFactory范围的,可以被来自同一个Sessi
2、onFactory的Session共享.在HIBERNATE的文档中称其为SECONDLEVELCACHE.显然后者的优势较明显,也比较复合当前的使用环境. 它可以使用不同的缓存实现,如EhCache、JBossCache、OsCache等(二级缓存是缓存实体对象的)还有一个类型的CACHE就是QueryCache.它的作用就是缓存一个Query以及Query返回对象的Identifier以及对象的类型.有了QueryCache后就可以高效的使用SECONDLEVELCACHE.hibernate查询缓存(hibernate默
3、认是关闭的)查询缓存是针对普通属性结果集的缓存对实体对象的结果集只缓存id查询缓存的生命周期,当前关联的表发生修改,那么查询缓存生命周期结束查询缓存的配置和使用:1.启用查询缓存:在hibernate.cfg.xml中加入:true2.在程序中必须手动启用查询缓存,如:query.setCacheable(true);QueryCache用来缓存查询语句,及查询结果集中对象的Identifier与Type.当再次
4、使用已缓存的Query时,就可以通过对象的Identifier与Type在SECONDLEVELCACHE中查找实际的对象.对于查询缓存来说,缓存的key是根据hql生成的sql,再加上参数,分页等信息(可以通过日志输出看到,不过它的输出不是很可读,最好改一下它的代码)。 注:一级缓存也叫session级的缓存或事务缓存。Hibernate二级缓存也称为进程级的缓存或SessionFactory级的缓存。二级缓存是全局缓存,它可以被所有的session共享。二级缓存的生命周期和SessionFactory的生命周期一致,Ses
5、sionFactory可以管理二级缓存。 二、缓存的范围缓存的范围分为3类:1.事务范围 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,good,noloosening.6.5.2DCSsidewiringtocompletetheenclosureandtheothersideafterthewiringiscompleted,DCSwithintheenclosurewhenthepowermoduleshouldbeloosen
6、edorthepowergoesout.6.6lowvoltagecableterminalmaking6.6.1first只有当事务结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围.2.应用范围 应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存或硬盘作为存储介质,二级缓存就属于应用范围.3.集群范围 在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到
7、集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式.三、缓存的方式有四种,分别为: CacheConcurrencyStrategy.NONE CacheConcurrencyStrategy.READ_ONLY,只读模式,在此模式下,如果对数据进行更新操作,会有异常; CacheConcurrencyStrategy.READ_WRITE,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询; Ca
8、cheConcurrencyStrategy.NONSTRICT_READ_WRITE,不严格的读写模式则不会的缓存数据加锁; CacheConcurrencyStrategy.TRANSACTIONAL,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只