zoukankan      html  css  js  c++  java
  • Mybatis 二级缓存脏读

    1. 脏读的产生
      Mybatis的二级缓存是和命名空间绑定的,所以通常情况下每一个Mapper映射文件都有自己的二级缓存,不同的mapper的二级缓存互不影响。这样的设计一不注意就会引起脏读,从而导致数据一致性的问题。引起脏读的操作通常发生在多表关联操作中,比如在两个不同的mapper中都涉及到同一个表的增删改查操作,当其中一个mapper对这张表进行查询操作,此时另一个mapper进行了更新操作刷新缓存,然后第一个mapper又查询了一次,那么这次查询出的数据是脏数据。出现脏读的原因是他们的操作的缓存并不是同一个。

    2. 脏读的避免

    • mapper中的操作以单表操作为主,避免在关联操作中使用mapper
    • 在关联操作的mapper中使用参照缓存
    1. 配置
      Mapper接口和XML配置使用的是同一个命名空间。因此他们只能使用同一个缓存。

    在Mapper接口中配置缓存然后在XML使用参照缓存

    @CacheNarnespaceRef(RoleMapper.class) public interface RoleMapper { 
    }
    
    <!--那么在XML中只能使用参照缓存-->
    <cache-ref narnespace=” tk.rnybatis.sirnple .rnapper.RoleMapper”/> 
    

    或者可以配置XML然后Mapper接口使用参照缓存

    @CacheNarnespaceRef(RoleMapper.class) public interface RoleMapper {
    }
    
    <mapper narnespace="tk.rnybatis.sirnple.rnapper.RoleMapper"> 
    <cache 
    eviction="FIFO" flushinterval="60000" Size="512"
    readOnly="false"/>
    </mapper> 
    
  • 相关阅读:
    04 SecurityContextHolder与SecurityContext说明
    03 spring security执行流程分析
    02 spring security 自定义用户认证流程
    01 spring security入门篇
    第三周进度
    第二周进度
    一维整数组所有子数组和的最大值
    初入园子,自我介绍
    密码登录源码(jsp+java+数据库)
    第一周总结
  • 原文地址:https://www.cnblogs.com/lanqi/p/9283516.html
Copyright © 2011-2022 走看看