zoukankan      html  css  js  c++  java
  • mybatis 缓存失效和坑

    mybatis 缓存失效和坑

    mybatis 缓存类型

    1. local cache,也就是所谓的局部缓存。由以下参数控制:

    2. cache,也就是所谓的二级缓存。由以下参数控制:

      • cacheEnabled
      • cache
      • cache-ref
      • useCache
      • flushCache

    spring 接管后的一级缓存失效问题

    分为两种情况,如果没有开启事务,每一次sql都是用的新的SqlSession,这时mybatis的一级缓存是失效的。
    如果有事务,同一个事务中相同的查询使用的相同的SqlSessioon,此时一级缓存是生效的。
    如何判断是否是同一个SqlSession 可以把日志级别降到debug级别查看相应的SqlSessionId

    [Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13714753]]
    

    一级缓存的坑

    1. 同一个事务中在查询中间如果有其他线程修改了这条数据,这两条两次查询的还是内容相同(事务使用的是Read Committed)
      原因是同一个事务中spring使用的是同一个SqlSession,此时走的是SqlSession的缓存,并没有从数据中查询。
    2. 网上的其他问题

    如何解决一级缓存的坑

    • 在mybatis配置文件中localCacheScope=statement。

    • 在mapper配置文件中,给select设置flushCache=true。需要注意的是,这样会将local cache和 cache都清空掉。

    • 不用事务



    作者:19890316
    链接:https://www.jianshu.com/p/7c481c702ba1
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    算法复杂度
    购物网站简介
    算法的基本概念
    Visual Basic的启动与退出
    SQL Server 日志数据库清理办法
    jquery操作select详解(取值,设置选中)
    使用HttpClient连接WebAPI 转送JSON实体数据
    JQ 限制文本框 数字 小数 字母
    禁止调整自定义控件的尺寸
    C#异步编程(二):异步基础补充
  • 原文地址:https://www.cnblogs.com/marxtsui/p/14417331.html
Copyright © 2011-2022 走看看