-
一级,二级缓存的对比查看全部
-
二级缓存使用场景查看全部
-
二级缓存的介绍: 1.二级缓存又称为“全局缓存”,“应用级缓存” 2.二级缓存中的数据可适用方位是当前应用的所有会话,不会虽然某一个session会话的关闭而关闭,而是随着整个sessionFactory的关闭而关闭 3.二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件 二级缓存的适用场景: 1.很少被修改的数据 2.不是很重要的数据,允许出现偶尔并发的数据 3.不会被并发访问的数据 4.参考数据 一二级缓存的对比: 如图 总结: 1.Hibernate的缓存能提高检索效率 2.Hibernate的缓存分为一级缓存和二级缓存,一级缓存是会话级缓存,二级缓存是应用级缓存 3.Hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以要注意缓存的使用策略。查看全部
-
cache标签的属性查看全部
-
cache标签的属性: usage属性(必备):表示事务模式,总共提供了4种:read-only、transactional、read-write、nonstrict-read-write include属性:有两个值,分别是all(全缓存)与non-lazy(不对该实体进行懒加载的属性进行缓存). region属性:该属性值可以随意命名,作用是在ehcache.xml配置文件中引用region属性的值指定为该实体配置缓存策略. ehcache.xml配置文件中存在一个<defaultCache>标签对,该标签是默认的缓存策略. <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="1200" overflowToDisk="true" /> maxElementsInMemory属性:表示缓存中允许创建的最大对象数. eternal属性:表示缓存中的对象是否为永久的. timeToIdleSeconds属性:表示缓存数据钝化时间,即对象在它过期前的空闲时间(重启服务器会钝化). timeToLiveSeconds属性:表示缓存数据生存时间. overflowToDisk属性:表示溢出之后是否存储在硬盘上. 配置文件的<cache>标签的name属性值与实体类的region属性值对应.查看全部
-
Hibernate二级缓存 二级缓存的生命周期是SessionFactory,当SessionFactory关闭时,缓存才会清空. 二级缓存是每个session共用的缓存,并不是默认开启的,需要手动去配置. 配置二级缓存的步骤: 1.添加二级缓存对应的jar包. jar包:commons-logging-1.1.3.jar、ehcache.jar 2.在Hibernate的配置文件中添加Provider类的描述(即添加二级缓存接口对应外部的实现类). <property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property> 3.添加二级缓存的属性配置文件,直接放在src根目录即可. ehcache.xml 4.在需要被缓存的表所对应的映射文件中添加<cache/>标签. 在<class>标签下添加<cache usage="read-only"/> 虽然已经给Hibernate添加二级缓存,但是实体类并不是默认开启二级缓存的,因此需要在被缓存的表所对应的映射文件中添加<cache/>标签指明进行开启.查看全部
-
二级缓存的配置步骤: 添加二级缓存对应的jar包:ehcache.jar commons-logging-1.1.3.jar 在Hibernate的配置文件中添加Provider类的描述,,如下: <!--指定二级缓存的外部实现类--> <property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property> 添加二级缓存的属性配置文件: ehcache.xml 在需要被缓存的表所对应的映射文件中添加<cache/>标签,如下 <!--开启二级缓存--> <cache usage="read-only"/>查看全部
-
一级缓存注意问题: 1.query.list()是不会使用一级缓存的。 2.【推荐】query.iterate()会使用一级缓存,当缓存中有数据的时候,query.iterate()将所有对象的id查询出来然后到缓存中将所有对象都查询出来,如果缓存中没有数据,query.iterate()则把对象从数据库中一条一条的将数据查出来。 一级缓存有时候也会对程序的性能产生影响. 因为在对数据进行增删改操作时,同样需要更新缓存中的数据. 即本来保存在缓存中的对象,当被更新后,同一个session再次访问被更新后的对象时,就会重新发送sql语句获取对象. 但总体上还是提升了查询效率. 使用Query接口的list方法进行查询数据时,不会使用到缓存. 即同一Query接口使用多次list方法对同一实体进行查询时,会发送多次sql语句.但缓存中一样会保留查询的数据,只是list方法不会去缓存中查找数据. Hibernate的Query接口还提供使用Iterator迭代器进行查询. 使用Query接口的iterator()方法返回包含该结果集的Iterator实例. 然后使用Iterator的hasNext()方法判断是否还存在待遍历对象. 使用Iterator的next()方法获取当前遍历的对象. Query query=session.createQuery("from Employee"); Iterator iterator=query.iterator(); while(iterator.hasNext()){ Employee emp=(Employee)iterator.next(); } 使用Iterator迭代器进行查询时,会使用缓存. Iterator使用缓存步骤: 首先从数据库查询目标对象的id字段,然后根据id字段到缓存中查找数据,若缓存中存在该数据,则直接从缓存获取,否则重新发送完整sql语句到数据库中获取数据.查看全部
-
Hibernate一级缓存的API查看全部
-
一、介绍一级缓存: 1.Hibernate一级缓存又称为"Session缓存","会话级缓存" 2.通过Session从数据库查询实体时把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而是从内存中获取,这就是缓存 3.一级缓存的生命周期和Session相同;Session销毁,他也销毁 4.一级缓存中的数据可适用范围在当前会话之内 二、Hibernate一级缓存API: 一级缓存是Hibernate的默认缓存,无法取消,用两个方法管理: 1、evict():用于将某个对象从Session的一级缓存中清除。 2、clear():用于将一级缓存中的所有对象全部清除。查看全部
-
Hibernate的缓存与session有关查看全部
-
Hibernate缓存: 1.Hibernate缓存与session相关,同一个session第二次访问同一个对象将使用缓存 2.在不同的session中多次查询同一个对象时,会执行多次数据库查询 3.在一级缓存当中,持久化类的每个实例都具有唯一的OID,也就是说同一个session两次查询同一个对象时,第二次是不会再将对象保存在缓存当中的查看全部
-
缓存的工作原理查看全部
-
为什么使用缓存?查看全部
-
这里说的缓存并不是指计算机的内存或者CPU的一二级缓存。 缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略。查看全部
举报
0/150
提交
取消