mybatis 一级缓存二级缓存要点

惯例,不介绍概念,这里记录需要记录的要点:

  • 缓存通过HashMap实现

  • 一级缓存作用域是sqlSession,默认开启,在高并发或者分布式(每个节点有自己的缓存)的情况下会产生脏数据。所以建议

  • 一级缓存级别调成 statement,每次查询结束都会清掉一级缓存
    mybatis集合spring一级缓存失效问题:
    https://www.cnblogs.com/zemliu/p/3239014.html
    未开启事务的情况之下,每次查询,spring都会关闭旧的sqlSession而创建新的sqlSession,因此此时的一级缓存是没有启作用的
    开启事务的情况之下,spring使用threadLocal获取当前资源绑定同一个sqlSession,因此此时一级缓存是有效的

  • 二级缓存作用域是namespace,默认也是开启的(总开关开启),但需要配置才能生效

  • 二级缓存默认会使用(Least Flush Interval,LRU最近最少使用的)算法来收回

  • 如果需要开启二级缓存,resultMap的对应的实体类必须要序列化,不然会报java.io.NotSerializableException

  • 映射语句文件中所有的insert update delete语句会刷新缓存

  • 数据的查询顺序是 二级缓存 -> 一级缓存 -> 数据库

你可能感兴趣的:(JAVA,SSM)