mybatis 缓存

一.mybatis 两级缓存

1.一级缓存(本地缓存)

*1.使用

sqlSession级别的缓存(一个Map),一级缓存一直开启,与数据库同一次会话期间查询到的数据会放在本地缓存中,以后如果需要获取相同的数据,直接从缓存中取

*2.失效情况

  • sqlSession不同
  • sqlSession相同,查询条件不同(一级缓存中还没有这个数据)
  • sqlSession相同,两次查询之间执行了增删改的操作
  • sqlSession相同,手动清除了一级缓存

2.二级缓存(全局缓存)

基于namespace级别的缓存,一个namespace对应一个二级缓存

*1. 工作机制

  • 一个会话,查询一条数据,这个数据就会被放在当前会话的一级缓存中。如果会话关闭,一级缓存中的数据会被保存到二级缓存中,新的会话查询信息,就可以参照二级缓存
  • 不同namespace查出的数据会放在自己对应的缓存中(map)

    *2. 使用

    **1. 开启全局二级缓存

    **2. mapper.xml中配置使用二级缓存

    对应的mapper会有二级缓存
    1548472648617

    **3.实体类要实现序列化接口

    • eviction(回收策略)
      • LRU(默认) 移除最长时间不使用的对象
      • FIFO 按对象进入缓存的顺序来移除
      • SOFT 软引用,基于垃圾回收器状态和软引用规则移除对象
      • WEAK 弱引用,基于垃圾回收器状态和软引用规则移除对象,更积极
    • flushInterval(缓存刷新间隔):缓存多长时间清空一次,默认不清空,设置一个毫秒值
    • readOnly(是否只读):
      • true:mybatis认为所有从缓存中获取数据的操作都是只读,会直接把对对象的引用交给用户
      • false: mybatis认为获取数据可能会被修改,利用序列化反序列克隆一份新数据给用户
    • size(存放多少元素)
    • type(指定自定义缓存全类名),实现Cache接口即可

      3.缓存的相关配置

      1548473336719
      注:cacheEnable 是在全局mapper配置setting中的属性

      4.整合第三方缓存

      mybatis自带有一二级缓存,并且提供了Cache接口,供用户使用第三方缓存,如ehCache、redisCache
0%