简介

为了降低应用程序访问我们的数据的时候的频率,提高数据读取的速率。比如计算机中为了缓解CPU和内存之间速度差异而引入的缓存是一样的道理。Hibernate同样对缓存进行了支持,使得程序的运行效率得到了提高。

在Hibernate中,同一个session查询同一个数据时如果发现命中,就只会向数据库发送一条sql命令。不同的session会发送多次sql命令。

一级缓存

Hibernate一级缓存又称之为”Session缓存”,”会话期缓存”,顾名思义就是在会话期才会执行的缓存机制。一种轻量级的实现。session销毁时跟随销毁。

通过session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一个实体时就不会再从数据库中获取了,而是从内存中获取此数据,大大的提高了数据获取的速度!

一级缓存的特点:

- 一级缓存无法撤销,而且是被强制执行的。

- 相关的API:

- evict():用于将某个对象从Session的一级缓存中清除

- clear():用于将一级缓存中的所有的对象全部清除

二级缓存

二级缓存的出现就是为了弥补一级缓存的生存期局限于session的生存期内,便于其他的session也能时用到缓存中的数据。即每个session都会共享的缓存,这就是Hibernate的二级缓存机制。

二级缓存默认不开启,所以需要手动的进行配置才行,步骤如下:

  • 添加二级缓存的对应的jar包:commons-logging.jar,ehcache.jar
  • 在Hibernate的配置文件中添加Provider类的描述:

    net.sf.ehcache.hibernate.EhCacheProvider
  • 添加二级缓存的属性配置文件:在hibernate-release-5.1.0.Final\hibernate-ehcache\ehcache.xml目录下可以找到,放到src目录下即可。
  • 在需要被缓存的表所对应的映射文件中添加标签。注意usage属性值的选择即可。

二者之间的区别

二级缓存: 其被称之为“全局缓存”,可供应用中所有的session共享缓存内容。是可插拔式的缓存,默认是EHCache,还可以支持其他的缓存组件,如Hashtable,OSCache,JBoss TreeCache等等。

在通常情况下将具有一下特征的数据会放到二级缓存中:

  • 很少被修改的数据
  • 不是很重要的数据,允许出现偶尔并发的数据
  • 不会被并发访问的数据
  • 参考性质的数据(字典表,码值表)

Hibernate 缓存机制全面讲解的更多相关文章

  1. 10.hibernate缓存机制详细分析(转自xiaoluo501395377)

    hibernate缓存机制详细分析   在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论 ...

  2. 【转 :Hibernate 缓存机制】

    转自:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html Hibernate 缓存机制 一.why(为什么要用Hibernate缓存 ...

  3. hibernate缓存机制详解

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

  4. hibernate缓存机制与N+1问题

    在项目中遇到的趣事 本文基于hibernate缓存机制与N+1问题展开思考, 先介绍何为N+1问题 再hibernate中用list()获得对象: /** * 此时会发出一条sql,将30个学生全部查 ...

  5. hibernate缓存机制(转)

    原文出处:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是 ...

  6. hibernate缓存机制详细分析 复制代码 内部资料 请勿转载 谢谢合作

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  7. Hibernate 缓存机制

    一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...

  8. hibernate缓存机制详细分析

    转自:http://www.cnblogs.com/xiaoluo501395377/p/3377604.html 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级 ...

  9. Hibernate 缓存机制二(转)

    感谢:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是一个 ...

随机推荐

  1. bzoj 2440 (莫比乌斯函数)

    bzoj 2440 完全平方数 题意:找出第k个不是完全平方数的正整数倍的数. 例如 4  9  16  25 36什么的 通过容斥原理,我们减去所有完全数  4有n/4个,但是36这种会被重复减去, ...

  2. 机器学习基础—集成学习Bagging 和 Boosting

    集成学习 就是不断的通过数据子集形成新的规则,然后将这些规则合并.bagging和boosting都属于集成学习.集成学习的核心思想是通过训练形成多个分类器,然后将这些分类器进行组合. 所以归结为(1 ...

  3. c语言第四次作业e

    ---恢复内容开始--- (一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"Th ...

  4. 在Cisco Catalyst 3750端口做策略限速 QOS

    今天任务是在3750上限制端口的速率,本来以为是很简单的事,speed命令搞定,敲进去才知道speed命令只能叫端口速率改成10M或100M,也就是说只能起到端口高低速率的切换功能,不能自定义速率,后 ...

  5. a++与 ++a

    a++先执行表达式再自增执行表达式使用a原值++a先自增再执行表达示执行表达式使用自增a例:int a=0printf("%d",a++); //输0,执行完a=1int a=0p ...

  6. js匿名函数,闭包

    http://www.cnblogs.com/chenxianbin89/archive/2010/01/28/1658392.html

  7. Java阻塞队列的实现

    阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列 ...

  8. Redis出现多线程调用时抛出 [B cannot be cast to java.lang.Long] 异常

    原因分析: 多个线程同时调用了同一个jedis对象,导致内存数据被多个线程竞争,产生数据混乱 (或者大家都用通一个redis获取同一个实例,登录同一个账号使用缓存时报错) 解决方案:每个线程都new出 ...

  9. 64. Minimum Path Sum(中等, 又做出一个DP题, 你们非问我开不开心,当然开心喽!^^)

    Given an m x n grid filled with nonnegative numbers, find a path from top left to bottom right which ...

  10. Luogu P3919 【模板】可持久化数组 可持久化线段树

    其实就是可持久化线段树的模板题线段树不会看这里 #include<bits/stdc++.h> ; using namespace std; ]; ],rc[N*],val[N*],cnt ...