`
spjich
  • 浏览: 93727 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

关于Mybatis一级缓存

    博客分类:
  • j2ee
阅读更多

关于Mybatis一级缓存的介绍 https://yq.aliyun.com/articles/18678 这篇已经介绍的非常详尽了。

但是读完以后我产生了一个疑问,如果在同一个session中2次相同的数据库操作之间,DB里的数据改变了,Mybatis一级缓存如何确保数据一致性,带着以上疑问我做了如下实验:

 

1.方法级别没有开启@Transactional,Mybatis查询记录如下

 测试函数:

在以下函数第四行处会打一个端点,在断点期间,我会手工进行数据库操作

    public String getTest() {
        List<String> s=dao.getTest();
        System.out.println(s.size());
        List<String> s2=dao.getTest();
        System.out.println(s2.size());
        return "ok";
    }

日志打印

 



 

 

 第一次打印1,由于没有开启事物控制,所以session被关闭,第二次dao查询又重新开启了一次sqlsession,所以没有走一级缓存

 

 

 

 

 

2.方法级别开启了@Transactional,Mybatis查询记录如下

测试函数:

在以下函数第四行处会打一个端点,在断点期间,我会手工进行数据库操作

    @Transactional
    public String getTest() {
        List<String> s=dao.getTest();
        System.out.println(s.size());
        List<String> s2=dao.getTest();
        System.out.println(s2.size());
        return "ok";
    }

 



 

  可见第二次Dao实际是从缓存中获得数据,所以拿到的数据量还是1行,即使我已经在库中插入了2条username='186251732**'的记录 

 

 

 

 

结论:

Mybatis一级缓存在无事物的情况下确实提高了效率减轻了DB压力,但是在事物的里也会存在数据不一致的问题,必要时候需要采取一定的手段(数据库锁,线程锁)来保证数据一致性

 

  原创文章,转载请声名出处  http://spjich.iteye.com/admin/blogs/2353479

 

  • 大小: 253.7 KB
  • 大小: 311.4 KB
0
0
分享到:
评论

相关推荐

    深入理解MyBatis中的一级缓存与二级缓存

    主要给大家深入的介绍了关于MyBatis中一级缓存与二级缓存的相关资料,文中详细介绍MyBatis中一级缓存与二级缓存的工作原理及使用,对大家具有一定的参考性学习价值,需要的朋友们下面来一起看看吧。

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

    配套博客内容,mybatis一级缓存和二级缓存简单示例,供初学童鞋予以参考。 博客地址 https://blog.csdn.net/magi1201/article/details/85524712

    从0到1项目搭建-集成 Redis 配置MyBatis二级缓存

    基于 SpringBoot 从0搭建一个企业级开发项目,基于SpringBoot 的项目,并集成MyBatis-Plus、Redis、Druid、Logback ,并使用 Redis 配置 MyBatis 二级缓存。

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

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

    Mybatis的以及缓存和二级缓存(案例).mhtml

    此文章是对Mybatis框架的一级缓存一级二级缓存的描述,包括他们的作用,案例,以及部分源码分析,对一级缓存以及二级缓存进行了详细的描述以及概括,还有如何使用等内容

    MyBatis 二级缓存 关联刷新实现

     Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只开启一级缓存,二级缓存需要手动开启。  一级缓存只是相对于同一个SqlSession而言。也就是针对于同一事务,多次执行同一Mapper的相同查询方法,第一...

    mybatis一二级缓存

    关于mybatis的一二级缓存测试demo,一二级缓存详细测试

    MyBatis一级缓存避坑完全指南

    主要给大家介绍了关于MyBatis一级缓存避坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    mybatis一级二级缓存流程图.drawio

    mybatis一级二级缓存流程图.drawio mybatis一级二级缓存流程图.drawio mybatis一级二级缓存流程图.drawio mybatis一级二级缓存流程图.drawio

    深入了解MyBatis二级缓存

    今天小编就为大家分享一篇关于深入了解MyBatis二级缓存,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    MyBatis-05 缓存机制

    学习MyBatis框架的一级缓存和二级缓存,明确缓存的工作机制,并实现MyBatis框架与第三方缓存EhCache的整合。

    Mybatis一级、二级缓存介绍.zip

    Mybatis一级、二级缓存介绍.zip

    Mybatis常见知识点.md

    - 使得Mybatis一级缓存失效的方法 - Mybatis二级缓存 - Mybatis二级缓存的原理 - Mybatis缓存的缺点 &lt;!-- /TOC --&gt; Mybatis常见知识点 Mybatis优点 - 消除了JDBC硬编码的方式,提高了应用的扩展性。 - ...

    mybatis缓存

    mybatis支持缓存,如果我们查找数据库中某一条记录时,先从缓存中获取,如果缓存中不存在该记录,则从数据库中获取,在放入到缓存中。该文档是关于mybatis使用一级或二级缓存的介绍

    MyBatis关于二级缓存问题

    本篇文章主要介绍了MyBatis关于二级缓存问题,二级缓存是Mapper级别的缓存,多个sqlSession操作同一个Mapper,其二级缓存是可以共享的。

    【MyBatis源码全面解析】MyBatis一二级缓存介绍

    下面小编就为大家带来一篇【MyBatis源码全面解析】MyBatis一二级缓存介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    深入理解Mybatis二级缓存

    与一级缓存相比,二级缓存范围更大了一些,可以被多个SqlSession所共用。下面通过本文带领大家一起学习mybatis二级缓存知识,一起看看吧

    mybatis-redis:基于redis的mybatis二级缓存插件

    基于redis的mybatis二级缓存插件简介使用redis作为mybatis的缓存介质,通过使用mybatis的拦截器,在SQL执行的过程中,检查各个Mapper的二级缓存中过期的部分,匹配成功后删除过期的缓存,保证缓存的实时正确性。...

    Spring-Mybatis-Druid 整合Demo

    Spring-Mybatis-Druid 整合Demo

Global site tag (gtag.js) - Google Analytics