`
sniperzxl
  • 浏览: 8363 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

mybatis 多线程环境下缓存问题

阅读更多

使用mybatis的都应该知道,mybatis是对select语句进行缓存的额,同一个select在一次sqlSession未被关闭之前是不会执行多次的(前提是对应的数据未被修改过,确切的说是未被当前sqlSession修改过),后面拿到的查询结果是第一次查询结果的缓存。

 

以上机制提升了效率,减少了与数据库通信的次数,这是mybatis的优点

 

但是如果你的应用处于多线程并发环境下,以上机制的问题就来了,独立线程一定使用各自独立的sqlSession,那么缓存的都是本线程下的查询过程,并发如果同同时修改一个资源(比如一个表的同一条记录)并且对后续select有影响的话,这个机制让你拿不到你想要的结果。

 

解决办法:

在后续select之前,执行sqlSession.clearCache();方法来清除缓存就可以了。

 

注:这个跟mybatis-config.xml和mapper.xm里的Cache不一样,需改配置文件解决不了这个问题,应该使用clearCache方法。

分享到:
评论

相关推荐

    MyBatis缓存(一级缓存、二级缓存)

    需要注意的是,二级缓存对数据一致性要求较高,因为可能存在多个线程同时访问和修改同一份数据。因此,对于频繁更新的操作,二级缓存可能不是最佳选择,因为它可能引入数据不一致的问题。为了保证数据一致性,...

    mybatis一级缓存和二级缓存简单示例

    - **并发问题**:在多线程环境中,一级缓存不会引起问题,因为每个 SqlSession 是线程局部的。而二级缓存可能引发并发问题,建议在更新数据后立即清空二级缓存,避免脏读。 - **缓存更新策略**:MyBatis 提供了多种...

    MyBatis-05 缓存机制

    然而,需要注意的是,二级缓存可能导致数据一致性问题,特别是在多线程环境下,因此在使用过程中需要关注并发控制和数据同步。 总之,MyBatis的缓存机制是提高系统性能的重要手段,一级缓存优化了单个SqlSession的...

    mybatis+redis缓存配置

    ### MyBatis与Redis缓存配置详解 #### 一、MyBatis缓存机制概述 在MyBatis中,缓存是一项重要的性能优化措施。它能够显著减少数据库的访问次数,提高应用程序的响应速度。MyBatis提供了两种级别的缓存支持:一级...

    缓存处理-mybatis层

    但是,由于多线程环境下可能存在并发问题,因此在启用二级缓存时需要注意线程安全。 开启MyBatis的缓存功能,需要在Mapper的XML配置文件中添加`<cache>`标签,并可以设置相应的属性,如 eviction(清除策略)、...

    分布式系统架构——使用Redis做MyBatis的二级缓存 - CSDN博客1

    Redis虽然支持事务,但在复杂的分布式系统中,可能需要结合其他分布式锁(如Redisson或RedLock)来保证多线程环境下缓存数据的正确性。同时,由于Redis并非完全持久化的存储,还需要考虑数据丢失的风险,适时地进行...

    mybatis二级缓存扩展-与redis集成

    因此,对于多线程或分布式环境,可能需要在事务提交后手动触发缓存更新。 除了基本的集成,我们还可以根据业务需求进一步优化。例如,通过Redis的发布订阅功能,可以实现实时更新缓存,确保多节点间的数据一致性。...

    Mybatis延迟加载和缓存

    二级缓存的生命周期更长,但需要注意并发问题,因为多个线程可能同时修改同一份缓存数据,因此在高并发场景下需谨慎使用。 ### 总结 Mybatis 的延迟加载和缓存机制是其性能优化的关键所在。延迟加载通过按需加载...

    Mybatis缓存测试示例

    4. **并发测试**:在多线程环境下测试缓存,查看是否存在数据一致性问题。这需要确保在并发场景下,缓存的更新和读取操作不会导致数据错误。 5. **性能测试**:评估开启缓存后的系统性能提升,比如对比启用和禁用...

    J2EE企业级项目开发-3期(KC007) 6.5 MyBatis的事务管理和缓存机制文档.doc

    然而,二级缓存需要注意并发问题,因为它可能被多个线程访问,因此在多线程环境下需谨慎使用。 MyBatis 的缓存机制可以有效减少数据库的负载,提高系统响应速度。但同时,也需要合理配置和管理缓存,避免因缓存导致...

    Mybatis的缓存1

    2. 并发问题:在多线程环境下,一级缓存不能保证数据的一致性,二级缓存则需要正确配置并发控制策略。 3. 数据一致性:二级缓存可能导致数据不一致,尤其是在多个SqlSession并发操作同一数据时。因此,对于实时性...

    mybatis添加ehcache缓存支持

    为了提高性能和减少对数据库的直接访问,MyBatis 提供了缓存功能,而Ehcache 是一个广泛使用的开源Java缓存库,可以集成到MyBatis 中以实现高效的缓存管理。 在MyBatis 中添加Ehcache 缓存支持,首先需要确保项目...

    Mybatis入门实例(二)——添加ehcache缓存支持

    一级缓存默认开启,但其作用范围有限,对于多线程或多用户环境可能不够理想,因此我们通常会启用二级缓存来进一步优化。 Ehcache的集成步骤如下: 1. **添加依赖**:在项目构建文件(如Maven的pom.xml)中,引入...

    Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.zip)

    6. **性能优化**:Mybatis-ehcache可能提供了额外的优化措施,例如在多线程环境下如何保证缓存的线程安全,以及如何避免不必要的数据库访问。 7. **Ehcache核心组件**:Ehcache内部包括了缓存管理器、缓存区域、...

    mybatis2020.zip

    在实际应用中,需要注意的是,二级缓存可能导致并发问题,因为它可能在多个线程之间共享数据。因此,合理配置缓存策略以及理解缓存行为对于避免数据不一致至关重要。 这个压缩包 "mybatis2020.zip" 很可能包含对 ...

    对mybatis3 基本环境搭建优化(二)

    总结,MyBatis3的环境搭建优化涉及多个层面,从基础配置到最佳实践,每个环节都需要细致考虑,以达到提升开发效率和系统性能的目的。在实际开发中,结合具体业务场景,灵活运用上述知识点,可以构建出高效、可维护的...

    MyBatis_sql-resultMap-缓存

    需要注意的是,二级缓存的正确使用需要考虑并发和数据一致性问题,比如在多线程环境下,可能会出现脏读或丢失更新的情况。 总的来说,`resultMap`和缓存机制是MyBatis提高开发效率和系统性能的关键要素。理解并合理...

    mybatis-3-mybatis-3.2.6

    SqlSessionFactory是线程安全的,可以长期保存,多次重复使用。 4. **SqlSession**:SqlSession代表数据库的一次会话,可以执行SQL命令和处理结果集。它的生命周期通常很短,用完即关闭。 5. **Executor**:执行器...

    mybatis中文离线文档

    本地缓存作用于单个SqlSession,而二级缓存则可以在多个SqlSession之间共享。 9. **事务管理**:MyBatis支持手动和自动两种事务管理模式。在手动模式下,开发者需要显式地提交或回滚事务;而在自动模式下,MyBatis...

    MyBatis-3.2.2和mybatis-spring-1.2.1架包

    3. SqlSessionTemplate:封装了SqlSession的常用操作,提供了线程安全的SqlSession实例,避免了多线程环境下SqlSession的管理问题。 4. MapperFactoryBean:用于创建Mapper接口的代理对象,使得可以在Spring的上下...

Global site tag (gtag.js) - Google Analytics