Hibernate缓存机制和MyBatis缓存机制

Hibernate缓存机制和MyBatis缓存机制Hibernate缓存机制和MyBatis缓存机制

大家好,又见面了,我是你们的朋友全栈君。

原文地址:https://my.oschina.net/u/1445731/blog/416200?p=%7B%7BtotalPage%7D%7D

Mybatis缓存

分为1级缓存和2级缓存,2级缓存在sessionfactory中,1级缓存在session中。

  1. session中的缓存在session连接关闭并被连接池回收时清理,或者手动清理

  2. sessionfactory中的缓存需要在mybatis配置文件中手动配置,配置如下:

    [html] 
    view plain  
    copy

    1. <setting name=“cacheEnabled” value=“true”/>  

    [html] 
    view plain  
    copy

    1. <mapper namespace=“dao.userdao”>  
    2.    …  select statement …       <!– Cache 配置 –>  
    3.     <cache          
    4.         eviction=“FIFO”  
    5.         flushInterval=“60000”  
    6.         size=“512”  
    7.         readOnly=“true” />  
    8. </mapper>  

flushInterval:刷新轮询时间,每隔这个时间后缓存被清理一次。

参考博客园地址:http://www.cnblogs.com/zemliu/archive/2013/08/05/3239014.html

Hiberante缓存

一、why(为什么要用Hibernate缓存?)

Hibernate是一个持久层框架,经常访问物理数据库。

为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。

缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

二、what(Hibernate缓存原理是怎样的?)

Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。

1.Hibernate一级缓存又称为“Session的缓存”。

Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)。

一级缓存中,持久化类的每个实例都具有唯一的OID。

2.Hibernate二级缓存又称为“SessionFactory的缓存”。

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

第二级缓存是可选的,是一个可配置的插件,默认下SessionFactory不会启用这个插件。

Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。

什么样的数据适合存放到第二级缓存中?   

1) 很少被修改的数据   

2) 不是很重要的数据,允许出现偶尔并发的数据   

3) 不会被并发访问的数据   

4) 常量数据   

不适合存放到第二级缓存的数据?   

1) 经常被修改的数据   

2) 绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发   

3) 与其他应用共享的数据。

3.Session的延迟加载实现要解决两个问题:正常关闭连接和确保请求中访问的是同一个session。

Hibernate session就是java.sql.Connection的一层高级封装,一个session对应了一个Connection。

http请求结束后正确的关闭session(过滤器实现了session的正常关闭);延迟加载必须保证是同一个session(session绑定在ThreadLocal)。

4.Hibernate查找对象如何应用缓存?

当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;

查不到,如果配置了二级缓存,那么从二级缓存中查;

如果都查不到,再查询数据库,把结果按照ID放入到缓存删除、更新、增加数据的时候,同时更新缓存。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106202.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • XMLElement,XMLDocument 用法「建议收藏」

    XMLElement,XMLDocument 用法「建议收藏」来源http://www.cr173.com/html/23515_1.html一前言先来了解下操作XML所涉及到的几个类及之间的关系 如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家*1XMLElement主要是针对节点的一些属性进行操作*2XMLDocument主要是针对节点的CUID操作*3XMLNode为抽象

    2022年6月19日
    42
  • 服务器硬件工程师从入门到精通系列视频教程(1)-基础篇-赵振坤-专题视频课程…「建议收藏」

    服务器硬件工程师从入门到精通系列视频教程(1)-基础篇-赵振坤-专题视频课程…「建议收藏」本课程会详细讲解服务器硬件的基本概念和分类,服务器的硬件组成和相关技术,服务器的硬件组装和软件安装流程,服务器的BIOS设置和固件更新以及板载RAID的配置,服务器操作系统和驱动程序的安装,服务器远程管理功能配置,以及服务器硬件启动过程和常见硬件故障的排除。…

    2022年10月20日
    2
  • 安全网站推荐

    安全网站推荐

    2021年9月10日
    78
  • C++通过TinyXML类库读写XML文件

    C++通过TinyXML类库读写XML文件TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。

    2022年4月30日
    35
  • Python gzip和bz2模块 读写.gz 和.bz2压缩文件

    Python gzip和bz2模块 读写.gz 和.bz2压缩文件读写压缩文件问题你想读写一个gzip或bz2格式的压缩文件。解决方案gzip和bz2模块可以很容易的处理这些文件。两个模块都为open()函数提供了另外的实现来解决这个问题。比如,为了以文本形式读取压缩文件,可以这样做:#gzipcompressionimportgzipwithgzip.open(‘somefile.gz’,’rt’)asf:…

    2022年5月23日
    36
  • java 二维数组 arraycopy_Java对数组的复制[通俗易懂]

    java 二维数组 arraycopy_Java对数组的复制[通俗易懂]定义一个数组int[]a={3,1,4,2,5};int[]b=a;数组b只是对数组a的又一个引用,即浅拷贝。如果改变数组b中元素的值,其实是改变了数组a的元素的值,要实现深度复制,可以用clone或者System.arrayCopyint[]a={3,1,4,2,5};int[]b=a.clone();b[0]=10;System.out.println(b[0]+””+a[0…

    2022年7月7日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号