二级缓存是Mapper级别的缓存,多个SqlSession去操作同一个Mapper中的SQL语句,则这些SqlSession可以共享二级缓存,即二级缓存是跨SqlSession的。

配置:

1、在yml中添加以下代码

mybatis:configuration:cache-enabled: true

2、在需要开启的mapper.xml中,添加以下代码(在<mapper namespace>下方)

<!-- 开启本mapper所在namespace的二级缓存 -->
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者产生冲突。

可用的清除策略有:

LRU – 最近最少使用:移除最长时间不被使用的对象。
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。
默认的清除策略是 LRU。

flushInterval(刷新间隔)属性可以被设置为任意的正整数,设置的值应该是一个以毫秒为单位的合理时间量。 默认情况是不设置,也就是没有刷新间隔,缓存仅仅会在调用语句时刷新。

size(引用数目)属性可以被设置为任意正整数,要注意欲缓存对象的大小和运行环境中可用的内存资源。默认值是 1024。

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

提示 二级缓存是事务性的。这意味着,当 SqlSession 完成并提交时,或是完成并回滚,但没有执行 flushCache=true 的 insert/delete/update 语句时,缓存会获得更新。

3、如果是只用了mybatis的话,就找到mybatis-config.xml,然后加入上面两步的代码

4、将po类实现Serializable接口

开启了二级缓存后,还需要将要缓存的pojo实现Serializable接口,为了将缓存数据取出执行反序列化操作,因为二级缓存数据存储介质多种多样,不一定只存在内存中,有可能存在硬盘中,如果我们要再取这个缓存的话,就需要反序列化了。所以建议mybatis中的pojo都去实现Serializable接口。

二级缓存解读

1、开启缓存的弊端是数据没有实时性,当数据库中的数据一旦修改,查询的数据还是缓存中的数据没有实时性,对于某些需要实时性显示数据的接口我们可以设置 useCache="false" ,设置该属性后,该接口每次查询出来都是去执行sql查询出实时性数据。如:

<!--根据店id和职位查询员工-->
<select id="getAuditerOpenidByShopId" resultType="string" useCache="false">select * from staff_user where id = 1
</select>

设置useCache=false可以禁用当前select语句的二级缓存,即每次查询都会发出sql去查询,默认情况是true,即该sql使用二级缓存。所以:针对每次查询都需要最新的数据sql,要设置成useCache=false,禁用二级缓存。

2、清空缓存,一般下执行完commit操作都需要刷新缓存,flushCache=true表示刷新缓存,这样可以避免数据库脏读。但是如果你不想刷新缓存只需要这么做:

<update id="updateStaffUser" flushCache="true" parameterType="StaffUser">update staff_user set name = #{name} where id = #{id}
</update>

将flushCache=true改为flushCache=false就不用刷新了

总结:

1、当为select语句时:

flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。

useCache默认为true,表示会将本条语句的结果进行二级缓存。

2、当为insert、update、delete语句时:

flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。

useCache属性在该情况下没有。

当为select语句的时候,如果没有去配置flushCache、useCache,那么默认是启用缓存的,所以,如果有必要,那么就需要人工修改配置。

mybatis开启二级缓存相关推荐

  1. mybatis开启二级缓存和懒加载,类型别名,类都简称

    SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE conf ...

  2. Springboot 集成 mybatis 开启二级缓存(redis)

    首先来了解下mybatis 缓存,mybatis缓存分为一级缓存和二级缓存.一级缓存是默认开启的,无需其他配置操作,二级缓存则需要手动设置开启. 一级缓存原理: Mybatis的一级缓存是指同一个Sq ...

  3. MyBatis 缓存详解-什么时候开启二级缓存?

    一级缓存默认是打开的,二级缓存需要配置才可以开启.那么我们必须思考一个问题,在什么情况下才有必要去开启二级缓存? 1.因为所有的增删改都会刷新二级缓存,导致二级缓存失效,所以适合在查询为主的应用中使用 ...

  4. mybatis的二级缓存

    二级缓存是mapper映射级别的缓存,多个SqlSession去操作同一个Mapper映射的sql语句,多个SqlSession可以共用二级缓存, 二级缓存是跨SqlSession的. 二级缓存结构图 ...

  5. Java Web现代化开发:Spring Boot + Mybatis + Redis二级缓存

    背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一.Mybatis是一个十分轻量好用的ORM框架.Redis是当今十分主流的分布式key- ...

  6. Mybatis之二级缓存简析

    2019独角兽企业重金招聘Python工程师标准>>> 注:Mybatis的版本是3.5.0. 上一篇分析了一级缓存,这篇来分析二级缓存. 以下的内容,跳过了很多细节,可以去看这篇博 ...

  7. tkmybatis开启二级缓存

    1.MyBatis配置文件开启二级缓存功能 <settings> <settingname="cacheEnabled"value="true" ...

  8. Mybatis 之 二级缓存

    1.二级缓存 二级缓存的原理和一级缓存原理一样,第一次查询,会将数据放入缓存中,然后第二次查询则会直接去缓存中取.但是一级缓存是基于sqlSession的,而二级缓存是基于mapper文件的names ...

  9. 关于Spring Boot + Mybatis + Redis二级缓存整合详解

    二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相 ...

最新文章

  1. 字符串的截取和替换常用方法
  2. 背景属性的相关属性设置
  3. 【一天一道兼容性】之——IOS4及以下fixed失效
  4. 数据结构:关于AVL树的平衡旋转详解
  5. ValueError: You are trying to load a weight file containing 12 layers into a model with 2 layers.
  6. springboot 工程启动报错之Consider defining a bean of type ‘XXX’ in your configuration.
  7. QS首发大学百强排名,华东五校表现惊艳,老牌985望尘莫及
  8. php制作学生卡片,PHP基础案例一:展示学生资料卡
  9. sap事务代码_「SAP技术」SAP MM 事务代码ME17的用法
  10. access 一亿条数据_操作用户只能看到自己本部门的数据功能
  11. 【GNN】图神经网络的解释性综述
  12. 云计算对IT产业的影响
  13. Tomcat SSL Configuration
  14. python xml.etree.ElementTree
  15. 理论知识内容有_育婴师培训课程包含哪些内容?
  16. Atitit nlp自然语言处理类库(java python nodejs c#net) 目录 1.1. Python snownlp 1 1.2. NLP.js一个nodejs/javascri
  17. VScode运行时提示找不到应用程序
  18. 接入百家号流量的方法
  19. ADB环境部署+ADB常见命令
  20. python涨跌柱表行业市盈率

热门文章

  1. 计算机程序员工作,计算机专业程序员工作日记范文.doc
  2. JavaScript:将毫秒转换为年/月/日 小时/分钟
  3. root后怎么刷回官方,recovery刷入root
  4. VISTA -MIT开源基于数据驱动的自动驾驶仿真引擎
  5. Parsing error: Cannot read file ‘e:\.....\tsconfig.json‘. eslint
  6. LightBox -灯箱效果插件(非常漂亮)
  7. 虚幻4学习笔记(一)
  8. python opencv 条形码及二维码检测识别
  9. 74LS175D四人抢答器设计
  10. python实现运动模糊图像_python opencv生成模糊图像