一、磁盘缓存:(disk cache)磁盘缓存分为读缓存和写缓存。

(1)读缓存指的是把从磁盘中读取的数据存储到内存空间中的方式。这样一来,当接下来需要读取同一数据时,就不用查询实际的磁盘,而是从磁盘缓存(内存)中把数据读出。使用磁盘缓存可以大大改善磁盘数据的访问速度。实现机制如下图:

(2) 写缓存是将要写入磁盘的数据先保存于系统为软件分配的内存空间(这个内存空间被称为“内存池”),当保存到内存池中的数据达到一个程度时,便将数据保存到硬盘中。这样可以减少实际的磁盘操作,减少写入所需的时间,也有效保护磁盘免于重复的读写操作而导致的损坏。

(3)磁盘缓存是为了减少CPU通过I/O读取磁盘的次数,提升I/O的效率,用一块内存来储存存取较频繁的磁盘内容,因为内存的存取是电子动作,而磁盘的存取是I/O动作。

二、Hibernate缓存:hibernate缓存包含一级缓存和二级缓存两大类。

(1)Hibernate一级缓存又称为“Session 的缓存”。Session缓存是内置缓存,是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)。每个Session都有自己独立的缓存,其中存放了被当前工作单元加载的对象,且只能被当前工作单元访问。一级缓存中,持久化类的每个实例都有唯一的OID。

(2)Hibernate二级缓存又称为“SessionFactory 的缓存”。SessionFactory缓存分为内置缓存和外置缓存。

SessionFactory外置缓存是可配置的缓存插件,其中的数据可以被多个Session共享访问。默认情况下,SessionFactory不会启用这个插件。外置缓存中的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。外置缓存也被称为Hibernate的第二级缓存。

SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是Session的一些集合属性包含的数据。内置缓存中存放了映射元数据和预定义的sql语句。映射元数据是映射文件中数据的拷贝,而预定义sql语句是在Hibernate初始化阶段根据映射元数据推导出来的,因此SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义sql语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。

由于Session Factory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题。因此需要适当的并发策略,该策略为被缓存的数据提供了事务隔离级别。

(3)Hibernate缓存的应用:当Hibernate根据ID访问数据对象的时候,首先从Session以及缓存中查,查不到,如果配置了二级缓存,再从二级缓存中查,如果都查不到,最后查数据库,把结果按照ID放入到缓存,删除、更新、增加数据的时候,同步更新缓存。

三、Hibernate的缓存机制:

缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存中读写数据,在特定的时刻或特定事件发生时会同步缓存和物理数据源的数据。

缓存的介质一般是内存,但如果缓存中存放的数据量非常大,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。

Hibernate的这两级缓存都位于持久化层,存放的都是数据库数据的拷贝,对于二者的更深层次的了解,可以参考以下资料:http://blog.csdn.net/u014586894/article/details/51630562 ;

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

四、Mybatis缓存:

1、Myatis默认情况下是没有开启缓存的,可以通过在sql映射文件中添加<cache/>开启缓存。该语句的效果如下:

(1)映射语句文件中的所有select语句将会被缓存;

(2)映射语句文件中的所有insert、update、delete语句会刷新缓存;

(3)缓存会使用Least Recently Used(LRU最近最少使用)算法来回收;

(4)根据时间表(例如 no flush internal,没有刷新间隔),缓存不会以任何时间顺序来刷新;

(5)缓存会存储列表集合或对象(无论查询方法返回什么)的1024个引用;

(6)缓存会被视为是read/write(可读写)的,意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

所有这些属性都可以通过缓存元素的属性来修改。

2、举例

<cache evicition="FIFO" flushInterval="60000" size="512" readOnly="true"/>

该配置创建了一个FIFO缓存,并每隔60秒刷新一次,存储结果对象或列表的512个引用,返回的对象是只读的,可用的回收策略默认是LRU:

LRU--最近最少使用:移除最长时间不被使用的对象;

FIFO--先进先出:按对象进入缓存的顺序来一处它们;

SOFT--软引用:移除基于垃圾回收器状态和软引用规则的对象;

WEAK--弱引用:更积极地移除基于垃圾回收器状态和弱引用规则的对象。

flushInterval(刷新间隔)可以被设置为任意的正整数,它们代表一个合理的毫秒形式的时间段。默认情况下是不设置的,即没有刷新间隔,缓存仅仅调用语句时刷新。

size(引用数目)可以被设置为任意正整数,默认是1024.

readOnly(只读)可以被设置为true或false,默认是false。只读的缓存会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改。可读写的缓存会返回缓存对象的拷贝(通过序列化),会慢一些,但是安全。

磁盘缓存、Hibernate缓存、Mybatis缓存相关推荐

  1. 缓存框架(Java缓存)与框架缓存(介绍mybatis缓存)

    Java缓存主要分为三种: 1.FIFO 2.LRU 3.LFU 它们一般应用于浏览器中,使很多操作更加方便快捷. 1.FIFO: FIFO是按存入的顺序进行排序的,如果命中缓存中的任意一个数据,也不 ...

  2. java框架缓存,缓存框架(Java缓存)与框架缓存(介绍mybatis缓存)

    Java缓存主要分为三种: 1.FIFO 2.LRU 3.LFU 它们一般应用于浏览器中,使很多操作更加方便快捷. 1.FIFO: FIFO是按存入的顺序进行排序的,如果命中缓存中的任意一个数据,也不 ...

  3. (转)Hibernate的一级缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/70148567 Hibernate的一级缓存 Hibernate的一级缓存就是指Session缓 ...

  4. MyBatis缓存技术(一级缓存、二级缓存)

    MyBatis缓存技术(一级缓存.二级缓存) MyBatis的缓存分类 一级缓存 一级缓存的作用域是一个SqlSession.MyBatis默认开启一级缓存.在同一个SqlSession中,执行相同的 ...

  5. 06 MyBatis缓存

    目录 一.MyBatis缓存介绍 介绍: 1.什么是缓存? 2.缓存有什么作用? 3.什么样的数据使用缓存? 4.MyBatis缓存分为哪几类? 5.如何判断两次Sql是否相同? 二.MyBatis一 ...

  6. 使用Redis在Hibernate中进行缓存

    Hibernate是Java编程语言的开放源代码,对象/关系映射框架.Hibernate的目标是帮助开发人员摆脱许多繁琐的手动数据处理任务.Hibernate能够在Java类和数据库表之间以及Java ...

  7. java中一级缓存_JavaWeb_(Hibernate框架)Hibernate中一级缓存

    Hibernate中一级缓存 Hibernate 中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份.其中一级缓存是 Hibernate 的内置缓存,在前面 ...

  8. ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️

    ❤️缓存集合(一级缓存.二级缓存.缓存原理以及自定义缓存-源码+图文分析,建议收藏) ❤️ 查询 : 连接数据库 ,耗资源!一次查询的结果,给他暂存在一个可以直接取到的地方!--> 内存 : 缓 ...

  9. Hibernate和MyBatis的缓存机制和比较

    原文地址:https://my.oschina.NET/u/1445731/blog/416200?p=%7B%7BtotalPage%7D%7D Mybatis缓存 分为1级缓存和2级缓存,2级缓存 ...

最新文章

  1. 核心技术靠化缘是要不来的——自己动手写ORM框架
  2. mybatis学习(29):适用于没有自增的数据库
  3. 程序闪退_苹果APP日常使用时一直闪退怎么办?
  4. “LINQ已死”论 为言论1 致歉 [Java | .Net | 致歉 ]
  5. 排序——冒泡排序算法
  6. MacBook取消自启动程序
  7. Android 屏幕实现水龙头事件
  8. CC2530 串口通信
  9. 操作系统安全 基本概念
  10. 特征选择-相关系数法F检验
  11. android仿微信图片编辑库,Android仿微信朋友圈添加图片
  12. 谷歌游览器提示“喔唷,奔溃啦!”报错误代码:STATUS_INVALID_IMAGE_HASH
  13. Linux whoami和who am i命令用法和区别
  14. codeforces 1326 E.Bombs
  15. 一文带你了解 PPT 里面如何使用合适的图表
  16. oracle-12514,Oracle错误 ORA-12514 解决方法
  17. [P2698][USACO12MAR]花盆Flowerpot
  18. Remix 以太坊Solidity IDE搭建与初步使用
  19. 计算机网络课程设计 文华学院,计算机网络课程设计-校园网的组建与设计.doc
  20. dfx软件测试书籍推荐,DFX是Design for X 谁知道Design for Reliability 方面的内容

热门文章

  1. peaZip V9.0 解压缩工具
  2. 手机使用打印机打印方法须知
  3. 解决STL文件导入SolidWorks中无法拉伸切除的问题
  4. 麻瓜编程Python Web基础
  5. 中小独立B2C商城网站运营推广之道
  6. oracle --高级函数应用-pivot (列转行)
  7. html中简述rem布局原理,rem布局原理解析
  8. “备份集中的数据库备份与现有的数据库不同”解决方法
  9. Vegas免费视频编辑软件(Win直装版)
  10. MyC++基础知识补漏