Hibernate数据缓存攻略
源代码: https://github.com/weiliangchun/JavaCode/tree/master/hibernateImooc/2-3Hibernate-cache
第一章 缓存策略概述
1. 课程内容
- 了解缓存
- 掌握hibernate一级缓存的使用
- 掌握hibernate二级缓存的使用
- hibernate一二级缓存的对比和总结
2. 什么是缓存?
- 并不是指计算机的内存或者CPU的一二级缓存
- 缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略
3. 为什么使用缓存?
- ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和优化ORM框架的执行效率至关重要
- hibernate的缓存是提升和优化hibernate执行效率的重要手段,所以学会hibernate缓存的使用和配置是优化的关键
第二章 hibernate不使用缓存的问题
观察下面代码发现什么问题?
public class Main {
public static void main(String[] args) {
Session session = HibernateUtil.getCurrentSession();
Employee emp = (Employee) session.get(Employee.class, 1);
System.out.println(emp.getName());
Session session = HibernateUtil.getCurrentSession();
emp = (Employee) session.get(Employee.class, 1);
System.out.println(emp.getName());
session.close();
}
}
控制台
Hibernate:
select
employee0_.EMPID as EMPID0_0_,
employee0_.NAME as NAME0_0_,
employee0_.AGE as AGE0_0_
from
EMPLOYEE employee0_
where
employee0_.EMPID=?
jack
jack
- 第二次查询同一个对象时,并没有再次执行数据库查询
- 在不同的session中多次查询同一对象时,会执行多次数据库查询
- 一级缓存中,持久化类的每个实例都具有唯一的OID
第三章 一级缓存介绍
- hibernate一级缓存又称为“session缓存”、“会话级缓存”
- 通过session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而从内存中获取,这就是缓存
- 一级缓存的生命周期和session相同;session销毁,它也销毁
- 一级缓存的数据可适用范围在当前会话之内
hibernate一级缓存的API
一级缓存无法取消,用两个方法管理:
- evict():用于将某个对象从session的一级缓存中清除
- clear():用于将一级缓存中的所有对象全部清除
一级缓存有时候会对程序的性能产生影响
第四章 二级缓存
提出问题,如何解决?
有些常用的数据,在一个session中缓存以后,我们希望在其它session中能够直接使用,而不用再次缓存怎么办?
使用更高级别的二级缓存,每个session公用的缓存
二级缓存的配置步骤
- 添加二级缓存对应jar包
- 在hibernate配置文件中添加Provider类的描述
- 添加二级缓存的属性配置文件
- 在需要被缓存的表所对应的映射文件中添加标签
标签的详细介绍
usage:指定缓存策略,可选的策略包括: transactional, read-write, nonstrict-read-write, read-only
第五章 一二级缓存对比及总结
二级缓存
- 二级缓存又称为“全局缓存”、“应用级缓存”
- 二级缓存中的数据可适用范围是当前应用的所有会话
- 二级缓存是可插拔式缓存,默认是EHCache,还支持其它二级缓存组件如:Hashtable, OSCache, SwarmCache, JBoss TreeCache等
在通常情况下会将具有以下特征的数据放入到二级缓存中
- 很少被修改的数据
- 不是很重要的数据,允许出现偶尔并发的数据
- 不会被并发访问的数据
- 参考数据
一二级缓存的对比

总结
- hibernate的缓存能提交检索效率
- hibernate的缓存分为一级缓存和二级缓存。一级缓存是会话级缓存,二级缓存是应用级缓存
- hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以要注意缓存的使用策略
Hibernate数据缓存攻略的更多相关文章
- hibernate 数据缓存
http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html,
- 全栈数据工程师养成攻略:Python 基本语法
全栈数据工程师养成攻略:Python 基本语法 Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解一些 ...
- Moon.Orm3.8技术全攻略
Moon.ORM技术全攻略 一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...
- 【转】轻松搞定FTP之FlashFxp全攻略
转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...
- IOS面试攻略
IOS面试攻略(1.0) 2013-10-13 20:58:09| 分类: IOS面试 | 标签:ios知识点总汇 ios面试 |举报|字号 订阅 来自:伊甸网 @ 看到这个关键字,我 ...
- 在Spring Boot中使用数据缓存
春节就要到了,在回家之前要赶快把今年欠下的技术债还清.so,今天继续.Spring Boot前面已经预热了n篇博客了,今天我们来继续看如何在Spring Boot中解决数据缓存问题.本篇博客是以初识在 ...
- 极客时间-左耳听风-程序员攻略-Linux系统、内存和网络
程序员练级攻略:Linux系统.内存和网络 Linux 系统相关 Red Hat Enterprise Linux 文档 . Linux Insides ,GitHub 上的一个开源电子书,其中讲述了 ...
- Oracle12c 性能优化攻略:攻略目录表
注:本文来源于 [美] Sam Alapati , Darl Kuhn , Bill Padfield 著 朱浩波 翻译 <Oracle Database 12C 性能优化攻略> ...
- BEA WebLogic平台下J2EE调优攻略--转载
BEA WebLogic平台下J2EE调优攻略 2008-06-25 作者:周海根 出处:网络 前 言 随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供 ...
随机推荐
- [Swift通天遁地]八、媒体与动画-(5)使用开源类库绘制文字、图形、图像、图表、SVG(可缩放矢量图形)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Django day26 HyperlinkedIdentityField,序列化组件的数据校验以及功能的(全局,局部)钩子函数,序列化组件的反序列化和保存
一:HyperlinkedIdentityField(用的很少):传三个参数:第一个路由名字,用来反向解析,第二个参数是要反向解析的参数值,第三个参数:有名分组的名字 -1 publish = ser ...
- Vue组件库elementUI 在el-row 或 el-col 上使用@click无效失效,
问题: elementUI 在el-row 或者 el-col 上使用@click失效, 解决: 在click后面加上 .native .要使用@click.native=”handler()”才行, ...
- HDFS你一定要知道,要考的
你肯定听过Hadoop,对就是那头奔跑的小象. Hadoop作为大数据时代代表性的解决方案被大家所熟知,它主要包含两部分内容: HDFS分布式文件存储 MapReduce分布式计算框架 前面我们分析存 ...
- html中保证中文能够正常显示
<meta http-equiv="Content-Type" content="text/html"; charset=utf-8"/> ...
- React Native状态机和应用设计思路
React Native状态机和应用设计思路 在原生Android开发中:当用户点击“登录”按钮时,从用户名输入框中读取用户输入的用户名,从密码输入框中读取用户输入的密码,然后交给注册模块去处理.但是 ...
- 1B课程笔记分享_StudyJams_2017
课程1B 概述 课程1B主要讲解了Android UI的ViewGroups(视图组).LinearLayout(线性布局).RelativeLayout(相对布局),Portrait Mode(竖屏 ...
- html5——拖拽
基本情况 在HTML5的规范中,我们可以通过为元素增加draggable="true"来设置此元素是否可以进行拖拽操作,其中图片.链接默认是开启的. 拖拽元素 页面中设置了drag ...
- Ruby开发环境的搭建
1.Ruby的下载 https://rubyinstaller.org/downloads/ 2.Ruby的安装 3.Eclipse配置Ruby开发环境 插件地址:http://rubyeclipse ...
- jQuery怎么去掉标签的hover效果
今天项目中遇到jquery去掉hover效果的问题,开始以为直接unbind(“hover”)就可以搞定,可是实际验证这个方法并没有作用,正确的使用方法应该是下面这样: /* 这种方法是新增的,在老的 ...