Mybatis(四)—— Mybatis 缓存

一、Mybatis 缓存

MyBatis 包含一个非常强大的查询缓存特性,使用缓存可以使应用更快地获取数据,避免频繁的数据库交互

二、Mybatis缓存分类

  1. 一级缓存:SqlSession的缓存

    • 一级缓存默认会启用,想要关闭一级缓存可以在select标签上配置flushCache=“true”;
    • 一级缓存存在于 SqlSession 的生命周期中,在同一个 SqlSession 中查询时, MyBatis 会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个 Map对象中。如果同一个 SqlSession 中执行的方法和参数完全一致,那么通过算法会生成相同的键值,当 Map 缓存对象中己经存在该键值时,则会返回缓存中的对象;
    • 任何的 INSERT 、UPDATE 、 DELETE 操作都会清空一级缓存;
  2. 二级缓存:SqlSessionFactory的缓存

    • 二级缓存存在于 SqlSessionFactory 的生命周期中,可以理解为跨sqlSession;缓存是以namespace为单位的,不同namespace下的操作互不影响。

    • setting参数 cacheEnabled,这个参数是二级缓存的全局开关,默认值是 true,如果把这个参数设置为 false,即使有后面的二级缓存配置,也不会生效;

    • 要开启二级缓存,你需要在你的 SQL 映射文件中添加配置:

    <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
    • 字面上看就是这样。这个简单语句的效果如下:

      • 映射语句文件中的所有 select 语句将会被缓存。
      • 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
      • 缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
      • 根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
      • 缓存会存储列表集合或对象(无论查询方法返回什么)的 512个引用。
      • 缓存会被视为是 read/write(可读/可写)的缓存;
    • Tips: 使用二级缓存容易出现脏读,建议避免使用二级缓存,在业务层使用可控制的缓存代替更好;

  3. 缓存使用示意图

  4. 缓存案例

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

mybatis整合redies,使用redis作为二级缓存

方法一(一)、RedisCache(mybatis二级缓存实现类)/Createdbyhhjianon17627./publicclassRedisCacheimplementsCache{

Java框架之Mybatis(二)

本文主要介绍Mybatis(一)之后剩下的内容:1mybatis中log4j的配置2dao层的开发(使用mapper代理的方式)3mybatis的配置详解4输入输出映射对应的类型(parameterType和resultType)5mybatis动态sql6mybatis中的一级缓存7mybat

J2Cache 没有 Redis 也可以实现多节点的缓存同步

J2Cache是一个两级的缓存框架,第一级是基于内存的数据缓存,支持caffeine、ehcache2和ehcache3,二级缓存只支持redis。在某些生产环境中你可能没有redis,但是又希望多个应用节点间的缓存数据是同步的。配置的方法很简单:1\.首先关闭二级缓存(使用none替代redis)j2cache