一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要
每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的。
Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的Mapper
映射文件中添加一行:
<cache />
它将采用默认的行为进行缓存:
映射文件中所有的select语句将被缓存
映射文件中所有的insert、update和delete语句将刷新缓存 缓存将使用LRU(Least Recently Used)最近最少使用策略算法来回
收
刷新间隔(no Flush Interval,没有刷新间隔),缓存不会以任何时间顺
序来刷新
缓存会存储列表集合和对象(无论查询方法返回什么)的1024个引用 缓存会被视为read/write(可读/可写)的缓存,意味着对象检索不是共
享的,而且可以安全的被调用者修改,而不干扰其他调用者或者线程所做的潜在修改
所有这些属性都可以通过缓存元素的属性来修改,比如: <cache
eviction="FIFO"
flushInterval="10800000" size="512"
readOnly="true" />
这个更高级的配置创建了一个FIFO缓存,并每隔3个小时刷新缓存,储存结
果对象或列表的512个引用,而且返回的对象被认为是只读的,因此在不同线程
中的调用者之间修改他们会导致冲突。
可用的收回策略有:
【默认】LRU——最近最少使用的:移除最长时间不被使用的对象 FIFO——先进先出的:按对象进入缓存的顺序来移除他们 SOFT——软引用:移除基于垃圾回收器状态和软引用规则的对象 WEAK——弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的
对象。
flushInterval(刷新间隔)可以被设置为任意的正整数(60*60*1000这种形式是不允许的),而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。
size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是1024.
readOnly(只读)属性可以被设置为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改,这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过发序列化)。这会慢一些,但是安全,因此默认是false。
配置完<cache/>表示该mapper映射文件中,所有的select语句都将被缓存,所有的insert、update和delete语句都将刷新缓存。但是实际中,我们并是希望这样,有些select不想被缓存时,可以添加select的属性useCache=“false”;有些insert、update和delete不想让他刷新缓存时,添加属性flushCache=”false ”。
------------------------------------------------------------------------
一、MyBatis的Cache配置
1、全局开关:默认是true,如果它配成false,其余各个Mapper XML文件配成支持cache也没用。
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
2、各个Mapper XML文件,默认是不采用cache。在配置文件加一行就可以支持cache:
<cache />
3、Mapper XML文件配置支持cache后,文件中所有的Mapper statement就支持了。此时要个别对待某条,需要:
<select id="inetAton" parameterType="string" resultType="integer" useCache=“false”>
select inet_aton(#{name})
</select>
二、注意的几个细节
1、如果readOnly为false,此时要结果集对象是可序列化的。
<cache readOnly="false"/>
2、在SqlSession未关闭之前,如果对于同样条件进行重复查询,此时采用的是local session cache,而不是上面说的这些cache。
3、MyBatis缓存查询到的结果集对象,而非结果集数据,是将映射的PO对象集合缓存起来。
相关推荐
基于 SpringBoot 从0搭建一个企业级开发项目,基于SpringBoot 的项目,并集成MyBatis-Plus、Redis、Druid、Logback ,并使用 Redis 配置 MyBatis 二级缓存。
mybatis 二级缓存学习
MyBatis 二级缓存 关联刷新实现1、MyBatis缓存介绍2、二级缓存问题2.1、数据不一致问题验证2.2、问题处理思路3、关联缓存刷新实现 1、MyBatis缓存介绍 Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只...
主要给大家深入的介绍了关于MyBatis中一级缓存与二级缓存的相关资料,文中详细介绍MyBatis中一级缓存与二级缓存的工作原理及使用,对大家具有一定的参考性学习价值,需要的朋友们下面来一起看看吧。
NULL 博文链接:https://zw7534313.iteye.com/blog/2404288
NULL 博文链接:https://zw7534313.iteye.com/blog/2404278
深入了解MyBatis二级缓存共6页.pdf.zip
mybatis二级缓存 + reads做第三级缓存
该资源为apache ignite实现mybatis二级缓存所需要的jar包,需要的可以下载。
此文章是对Mybatis框架的一级缓存一级二级缓存的描述,包括他们的作用,案例,以及部分源码分析,对一级缓存以及二级缓存进行了详细的描述以及概括,还有如何使用等内容
今天小编就为大家分享一篇关于深入了解MyBatis二级缓存,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
本文给大家介绍redis与ssm整合方法(mybatis二级缓存)。主要是利用redis去做mybatis的二级缓存,mybaits映射文件中所有的select都会刷新已有缓存,如果不存在就会新建缓存,所有的insert,update操作都会更新缓存
配套博客内容,mybatis一级缓存和二级缓存简单示例,供初学童鞋予以参考。 博客地址 https://blog.csdn.net/magi1201/article/details/85524712
MyBatis缓存(一级缓存、二级缓存)
主要为大家详细介绍了mybatis二级缓存的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
springboot整合redis做mybatis的二级缓存,含有自定义key,自定义过期时间,自定义序列化方式
关于mybatis的一二级缓存测试demo,一二级缓存详细测试
与一级缓存相比,二级缓存范围更大了一些,可以被多个SqlSession所共用。下面通过本文带领大家一起学习mybatis二级缓存知识,一起看看吧
基于redis的mybatis二级缓存插件简介使用redis作为mybatis的缓存介质,通过使用mybatis的拦截器,在SQL执行的过程中,检查各个Mapper的二级缓存中过期的部分,匹配成功后删除过期的缓存,保证缓存的实时正确性。...
- Mybatis二级缓存的原理 - Mybatis缓存的缺点 <!-- /TOC --> Mybatis常见知识点 Mybatis优点 - 消除了JDBC硬编码的方式,提高了应用的扩展性。 - 自定义SQL和对象持久化关系,带来了灵活性。 - SQL和对象持久...