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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函数

    string.h中的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函数

    2021年9月28日
  • mysql econnreset_MySQL在node.js服务器上的空闲时间后给出“ read ECONNRESET”错误「建议收藏」

    mysql econnreset_MySQL在node.js服务器上的空闲时间后给出“ read ECONNRESET”错误「建议收藏」我正在运行通过node-mysql模块连接到MySQL的Node服务器。连接和查询MySQL最初运行良好,没有任何错误,但是,将Node服务器闲置几个小时后的第一个查询会导致错误。错误是熟悉的readECONNRESET,来自node-mysql模块的内部。堆栈跟踪(请注意,跟踪的三个条目属于我的应用程序的错误报告代码):Erroratexports.Error.utils.createClas…

    2022年6月17日
  • 海龟作图python等边三角形_python 海龟作图[通俗易懂]

    海龟作图python等边三角形_python 海龟作图[通俗易懂]turtle绘图turtle绘图是python中引入的一个简单绘图工具,利用turtle模块绘图又被称为海龟作图,因为绘图过程可以看作是一个小海龟行走的轨迹。海龟就像是屏幕上的画笔,屏幕就是画布。1.1导入turtle模块使用turtle绘图时,首先要导入turtle模块,有以下两种方式:(说明:在python中调入模块函数无外乎两种方法:import+函数名(numpy,matplotlib…

    2022年6月28日
  • 汽车电子设计之SBC芯片简单认识[通俗易懂]

    汽车电子设计之SBC芯片简单认识[通俗易懂]参考英飞凌SBC官网资料:https://www.infineon.com/cms/cn/product/automotive-system-ic/system-basis-chips-sbc/SBC芯片在汽车电子领域可谓占一席之地了。那么什么是SBC?怎么用?用在哪里?主要特性?1.什么是SBC?SBC的系统框图系统基础芯片(SBC,SystemBasisChip),从广义上来说,是一种包含电源、通信、监控诊断、安全监控等特性以及GPIO的独立芯片。随着汽车电子模块的日益小型化,对低功耗和

    2022年9月12日
  • xp的终极优化

    xp的终极优化总体设想:让WinXP更苗条、性感、速度更快,使用更便捷。为了达到这个目的,我们主要从四个方面入手:1、减少磁盘空间占用2、终止不常用的系统服务3、安全问题4、另外一些技巧首先问一下,你是不是很想激活XP,不。。。准确的说你是不是想在ms的站上能够升级。如果答案是肯定的话,那我们就先来探讨一下安装的问题,目前流行的V4、V5、V6版本我还是比较推荐的,尤其是V5和V6这两个。安装的过程中有个序

    2022年10月7日
  • 镁光ssd管理工具 linux,SandForce主控固态硬盘SF-2241 vb2开卡成功经验「建议收藏」

    镁光ssd管理工具 linux,SandForce主控固态硬盘SF-2241 vb2开卡成功经验「建议收藏」一个威刚SP900128G固态硬盘坏了,想用开卡软件来修复,然后就必须知道是什么主控,于是拆开看里面SandForceSF2241VB2的主控芯片,flash看不懂600739095300463844,最后试出来是28044,MT29F128G08CFABBWP20MLCMicron镁光的。然后按量产网的SF2000开卡教程,开卡SandForce主控的ssd需要用到linux系统,于是…

    2022年6月22日

发表回复

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

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