源代码: 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. PCB WebAPI跨域访问 实现方式

    我们写WebAPI不仅自己系统调用,也需要给其它系统调用,那么如何实现跨域访问了,在这里介绍2种方法实现 方法一.修改Web.Config文件   实现 此方法是全局实现跨域,如果仅想某个方法实现跨域 ...

  2. bzoj4563: [Haoi2016]放棋子(错排+高精)

    4563: [Haoi2016]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 387  Solved: 247[Submit][Status] ...

  3. Netty编解码技术和UDP实现

    背景 作为网络传输框架,免不了传输对象,对象在传输之前就要序列化,这个序列化的过程就是编码过程.接收到编码后的数据就需要解码,还原传输的数据. 编解码技术就是java序列化技术,序列化的目的有两个,一 ...

  4. 【BZOJ3205_洛谷3638】[APIO2013]机器人(动态规划)

    题目: 洛谷3638 分析: 卡了一天的神题--(OrzJumpmelon) 首先预处理出从点\(p\)向\(d\)方向出发最终能到达的点\(nxt[p][d]\).这个可以直接记忆化搜索解决.如果出 ...

  5. Puppeteer——自动化脚本设计

    我被分配了一个繁琐的任务,就是要给100个相同的站点做同样的配置.曾经就有做过相同的事,那时还不会写脚本,全靠手动配置.机械的配置了两天的时间,身体感觉被掏空.所以这次我决定还是写一个脚本自动的进行配 ...

  6. JS——放大镜

    放大镜: 1.比例系数要恒定:在系数为4的情况下,若原图是820*512,那么小图必须是205*128,放大镜若是50,原图显示区域必须200 2.计算鼠标在小图中的坐标 3.放大镜需要在鼠标中间位置 ...

  7. IOS7升级攻略

    1) Select the main view, set the background color to black (or whatever color you want the status ba ...

  8. mvc 上传大文件

    <configuration> <system.web> <httpRuntime maxRequestLength="204800" useFull ...

  9. 环形缓冲区: ringbuf.c

    #cat aa.c /*ringbuf .c*/ #include<stdio.h> #include<ctype.h> #define NMAX 8 int iput = 0 ...

  10. ajax 禁用按钮防止重复提交

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...