源代码: 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
  1. 第二次查询同一个对象时,并没有再次执行数据库查询
  2. 在不同的session中多次查询同一对象时,会执行多次数据库查询
  3. 一级缓存中,持久化类的每个实例都具有唯一的OID

第三章 一级缓存介绍

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

hibernate一级缓存的API
一级缓存无法取消,用两个方法管理:

  • evict():用于将某个对象从session的一级缓存中清除
  • clear():用于将一级缓存中的所有对象全部清除

一级缓存有时候会对程序的性能产生影响

第四章 二级缓存

提出问题,如何解决?

有些常用的数据,在一个session中缓存以后,我们希望在其它session中能够直接使用,而不用再次缓存怎么办?

使用更高级别的二级缓存,每个session公用的缓存

二级缓存的配置步骤

  1. 添加二级缓存对应jar包
  2. 在hibernate配置文件中添加Provider类的描述
  3. 添加二级缓存的属性配置文件
  4. 在需要被缓存的表所对应的映射文件中添加标签

标签的详细介绍

usage:指定缓存策略,可选的策略包括: transactional, read-write, nonstrict-read-write, read-only

第五章 一二级缓存对比及总结

二级缓存

  • 二级缓存又称为“全局缓存”、“应用级缓存”
  • 二级缓存中的数据可适用范围是当前应用的所有会话
  • 二级缓存是可插拔式缓存,默认是EHCache,还支持其它二级缓存组件如:Hashtable, OSCache, SwarmCache, JBoss TreeCache等

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

  • 很少被修改的数据
  • 不是很重要的数据,允许出现偶尔并发的数据
  • 不会被并发访问的数据
  • 参考数据

一二级缓存的对比

总结

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

Hibernate数据缓存攻略的更多相关文章

  1. hibernate 数据缓存

    http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html,

  2. 全栈数据工程师养成攻略:Python 基本语法

    全栈数据工程师养成攻略:Python 基本语法 Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解一些 ...

  3. Moon.Orm3.8技术全攻略

    Moon.ORM技术全攻略  一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...

  4. 【转】轻松搞定FTP之FlashFxp全攻略

    转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...

  5. IOS面试攻略

    IOS面试攻略(1.0) 2013-10-13 20:58:09|  分类: IOS面试 |  标签:ios知识点总汇  ios面试  |举报|字号 订阅     来自:伊甸网 @ 看到这个关键字,我 ...

  6. 在Spring Boot中使用数据缓存

    春节就要到了,在回家之前要赶快把今年欠下的技术债还清.so,今天继续.Spring Boot前面已经预热了n篇博客了,今天我们来继续看如何在Spring Boot中解决数据缓存问题.本篇博客是以初识在 ...

  7. 极客时间-左耳听风-程序员攻略-Linux系统、内存和网络

    程序员练级攻略:Linux系统.内存和网络 Linux 系统相关 Red Hat Enterprise Linux 文档 . Linux Insides ,GitHub 上的一个开源电子书,其中讲述了 ...

  8. Oracle12c 性能优化攻略:攻略目录表

    注:本文来源于 [美] Sam Alapati ,   Darl Kuhn ,  Bill Padfield  著   朱浩波 翻译 <Oracle Database 12C 性能优化攻略> ...

  9. BEA WebLogic平台下J2EE调优攻略--转载

    BEA WebLogic平台下J2EE调优攻略   2008-06-25 作者:周海根 出处:网络   前 言 随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供 ...

随机推荐

  1. input的type等于mage标签引发的页面提交!

    主要原因是使用了<input type="image",而且放在了<form中. <input type="image"标签类似<inp ...

  2. c++ pow函数

    函数名称:   pow 函数原型:   double pow( double x, double y ); 函数功能:   计算x的y次幂 例:z=pow(x,y);    x=9,y=8  z就是9 ...

  3. [ ZJOI 2006 ] Trouble

    \(\\\) \(Description\) 有\(N\)个人的环,每个人需要至少\(x_i\)种不同的物品,并且要求任意相邻的两人都没有相同的物品,求最少需要多少种物品. \(N\in [0,2\t ...

  4. Mongodb 重置密码或创建用户

    1.关闭mongodb  服务 win+r  输入services.msc 回车 找到MongoDB  关闭掉 2.进入到 win +r  输入cmd  进入命令窗口 在进入到mongodb 的安装目 ...

  5. CSS3:变换和动画

    <html> <style> .container{ -webkit-perspective: 800; -webkit-perspective-origin: 50% 40% ...

  6. 关于java 关键字enum不识别的解决办法

    从别人那儿拷贝过来的myeclipse java工程,打开一看标红了一大片,仔细一看,原来是不识别enum关键字,这就有点尴尬了. 我自己重新建了一个java工程,测试了下,假如我在新建工程的时候选择 ...

  7. Springboot启动工程后,浏览器出现输入用户名和密码

    在使用spring boot的时候发现启动项目时,浏览器需要输入用户名和密码. baidu后发现是因为pom中引用了Spring Security,但是项目中没有使用,在pom中注释掉即可.

  8. 默认ttl参考

    UNIX 及类 UNIX操作系统 ICMP 回显应答的 TTL 字段值为 255 Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64 WINXP-32bit 回显应答的 T ...

  9. js 字符串,数组扩展

    console.log(Array.prototype.sort)//ƒ substring() { [native code] } console.log(String.prototype.subs ...

  10. NTP测试1

    ntp server A : 10.101.75.8 B : 10.101.75.38 B: [root@r10n16313.sqa.zmf /home/ahao.mah] #cat /etc/ntp ...