转载注明出处:http://www.cnblogs.com/xiaoming0601/p/5882980.html

一、什么是缓存:

  并不是指计算机的内存或者CPU的一二级缓存;缓存是指为了降低应用程序对物理数据源访问的频次从而提高应用程序的运行性能的一种策略。
 

二、为什么使用缓存:

1.ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和优化ORM框架的执行效率至关重要。
2.Hibernate的缓存是提升和优化Hibernate执行效率的重要手段,所以学会Hibernate缓存的使用和配置是优化的关键。
3.评判一个ORM框架是否优秀,访问数据库的频次就一个重要的标准。
 

三、介绍一级缓存:

1.Hibernate一级缓存又称为"Session缓存","会话级缓存"
2.通过Session从数据库查询实体时把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而是从内存中获取,这就是缓存
3.一级缓存的生命周期和Session相同;Session销毁,他也销毁
4.一级缓存中的数据可适用范围在当前会话之内
 

四、Hibernate一级缓存API:

一级缓存是Hibernate的默认缓存,无法取消,用两个方法管理:
1、evict():用于将某个对象从Session的一级缓存中清除。
2、clear():用于将一级缓存中的所有对象全部清除。
 

五.query.list()和query.iterator()方法的区别:

1.list每次都是通过一条语句直接操作数据库取出所有的数据返回(并且将对象存入hibernate缓存),在一个session中使用两次list()方法,都会发送查询语句,证明list()方法不使用缓存;
2.iterator首先通过一条语句取出所有数据的id,然后通过id在hibernate的一级缓存中查找是否存在该对象,如果存在则直接取出,如果没有则再次发出一条sql语句通过id取得对象(并且加入到缓存中),这样如果所有的id在缓存中都没有的话就会出现n+1条sql语句的问题。
3.所以两者需要合理的结合使用,最大提高性能。
4.使用list()后,数据在一级缓存中存在,再同一个session中使用iterator()的话,不会发送数据库语句,证明iterator()使用一级缓存,在一个session中使用两次list()方法,都会发送查询语句,证明list()方法不使用缓存
 

六.二级缓存的介绍

1.二级缓存又称为“全局缓存”、“应用级缓存”;
2.二级缓存中的数据可使用范围是当前应用的所有会话;
3.二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件如:HashTable、OSCache、SwarmCache等。
 

七.二级缓存(每个session共用的缓存)

1.每个session共用的缓存
2.二级缓存不是默认开启的,需要手动配置
  a.导入jar包
  b.加入ehcache.xml配置文件
    maxElementsInMemory="10000" 表示缓存中允许创建的最大对象数。
    eternal="false" 表示缓存中对象是否为永久的。
    timeToIdleSeconds="120" 表示缓存数据钝化时间(即对象在它过期前的空闲时间)。
    timeToLiveSeconds="120" 表示缓存数据生存时间(即对象在它过期前的生存时间)。
    overflowToDisk="true" 表示溢出之后是否存储在硬盘上。
  c.hibernate.cfg.xml中配置指定二级缓存的外部实现类
  d.xx.hbm.xml配置文件中配置指定使用二级缓存
    <cache usage="read-only" region="Employee(自定义命名)"/>只读
    (region="Employee(自定义命名)":在ehcache.xml文件中自定义配置)
 

八.通常具有以下特征的数据放入二级缓存

 1.很少被修改的数据;
 2.不是很重要的数据,允许偶尔出现并发的数据;
 3.不会被并发访问的数据;
 4.参考数据
 

九.一二级缓存的对比

 十.总结

1.Hibernate的缓存能提高检索效率;
2.Hibernate的缓存分为一级缓存和二级缓存,一级缓存是会话级缓存,二级缓存是应用级缓存;
3.Hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以注意缓存的使用策略。

Hibernate的缓存技术详解的更多相关文章

  1. 干货|java缓存技术详解

    一.缓存是什么? 请点击此处输入图片描述 Cache ①高速缓冲存储器,其中复制了频繁使用的数据以利于快速访问. ②位于速度相差较大的两种硬件/软件之间,用于协调两者数据传输速度差异的结构 二.缓存有 ...

  2. Hibernate 所有缓存机制详解

    hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...

  3. DiskLruCache硬盘缓存技术详解

    上次讲了使用内存缓存LruCache去加载很多图片而不造成OOM,而这种缓存的特点是在应用程序运行时管理内存中的资源(图片)的存储和释放,如果LruCache中有一张图片被释放了,再次加载该图片时需要 ...

  4. ThinkPHP 缓存技术详解 使用大S方法

    如果没有缓存的网站是百万级或者千万级的访问量,会给数据库或者服务器造成很大的压力,通过缓存,大幅减少服务器和数据库的负荷,假如我们把读取数据的过程分为三个层,第一个是访问层,第一个是缓存层,第三个是数 ...

  5. Hibernate所有缓存机制详解

    hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...

  6. [JavaEE]Hibernate 所有缓存机制详解

    Hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...

  7. php 面试必备:各种缓存技术详解

    这门课程以电商网站为例,通过具体场景模块实战,让你更系统的掌握缓存原理.使用场景等相关知识,帮助你构建完整的缓存知识体系,胜任实际开发中缓存的处理,提升代码性能!    从原理到场景 系统讲解PHP缓 ...

  8. hibernate缓存机制详解

    hiberante面试题—hibernate缓存机制详解   这是面试中经常问到的一个问题,可以按照我的思路回答,准你回答得很完美.首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再 ...

  9. 《CDN技术详解》 - CDN知多少?

    开发时间久了,就会接触到性能和并发方面的问题,如果说,在自己还是菜鸟的时候完全不用理会这种问题或者说有其他的高手去处理这类问题,那么,随着经验的丰富起来,自己必须要独立去处理了.或者,知道思路也行,毕 ...

随机推荐

  1. 【转】如何判断Javascript对象是否存在

    Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言描述的算法如下: ...

  2. 项目管理知识体系指南(PMBOOK指南)(第5版) 阅读摘要

    1.7.2 项目经理的人际技能 领导力: 团队建设: 激励: 沟通: 影响力: 决策能力: 政治和文化意识: 谈判: 建立信任: 冲突管理: 教练技术: 3.4 规划过程组 在制定项目管理计划和项目文 ...

  3. 使用wireshark抓取wcf生成的soap消息

    在使用wcf的时候想看下生成的soap的格式是怎样的,就想到了抓包. 平时用惯的抓包工具是需要破解,另外有时会不太好用. 于是就想起来用wireshark. 首先遇到几个问题: 1.wireshart ...

  4. 最近一直在搞CAE,发现Eplan p8真的好强大。

    最近一直在搞CAE,发现Eplan p8真的好强大. 标准化的意义在与提高工作效率,减少重复. 标准化后,不容易出错,项目更改容易.事件都能及时跟踪.

  5. Bulk Insert的用法 .

    /******* 导出到excel */EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:/temp1.xls -c -q -S&quo ...

  6. 如何重置CentOS 7的Root密码?设置CentOS 7的Root密码的方法与步骤

  7. ios下Safari无法触发click事件的处理

    ios下的Safari真是傲娇啊,坑好多. 首先上代码 <!DOCTYPE html> <html> <head> <title>122</tit ...

  8. MDX 占比同比环比

    http://blog.csdn.net/hero_hegang/article/details/9072889

  9. MFC ADO连接Oracle12c数据库 客户端环境搭建

    ADO连接方式一:Provider=MSDAORA.1; 环境配置如下: 去官网下载ODAC121024Xcopy_32bit.zip安装 安装方式如下: (1)解压文件 (2)用命令行CD到该文件的 ...

  10. AssetBundle系列——游戏资源打包(一)

    将本地资源打包,然后放到资源服务器上供游戏客户端下载或更新.服务器上包含以下资源列表:(1)游戏内容资源assetbundle(2)资源维护列表,包含每个资源的名字(完整路径名)和对应的版本号[资源名 ...