zoukankan      html  css  js  c++  java
  • Mybatis基础学习(五)—缓存

    一、概述

         mybatis提供查询缓存,如果缓存中有数据就不用从数据库中获取,用于减轻数据压力,提高系统性能。

         image

         一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

         二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

    二、一级缓存

    image

         第一次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,如果没有,从数据库查询用户信息。

    得到用户信息,将用户信息存储到一级缓存中。

         如果sqlSession去执行commit操作(执行插入、更新、删除),清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。

         第二次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,缓存中有,直接从缓存中获取用户信息。

         Mybatis默认支持一级缓存。

    1.测试一

    image

    结果:

    image

    只执行一条查询语句。

    2.测试2

    image

    结果:

    image

    sqlSession去执行插入、更新、删除,会清空SqlSession中的一级缓存。

    三、二级缓存

         image

    二级缓存是mapper级别的。

    第一次调用mapper下的SQL去查询用户信息。查询到的信息会存到该mapper对应的二级缓存区域内。

    第二次调用相同namespace下的mapper映射文件中相同的SQL去查询用户信息。会去对应的二级缓存内取结果。

    如果调用相同namespace下的mapper映射文件中的增删改SQL,并执行了commit操作。此时会清空该namespace下的二级缓存。

    1.开启二级缓存

    (1)在核心配置文件SqlMapConfig.xml开启二级缓存总开关

    image

    (2)在UserMapper映射文件中,开启二级缓存

    image

    (3)实现序列化

         由于二级缓存的数据不一定都是存储到内存中,它的存储介质多种多样,所以需要给缓存的对象执行序列化。

    如果该类存在父类,那么父类也要实现序列化。

    image

    2.测试

    (1)不开启二级缓存

    image

    结果:

    image

    默认不开启二级缓存,会发出三条语句。

    (2)开启二级缓存

    image

    Cache Hit Radio: 缓存命中率

    第一次缓存中没有记录,则命中率0.0

    第二次缓存中有记录,则命中率0.5(访问两次,有一次命中)

    3.禁用二级缓存

         该statement中设置userCache=false,可以禁用当前select语句的二级缓存,即每次查询都是去数据库中查询,默认情况下是true,即该statement使用二级缓存。

    image

    4.刷新二级缓存

    该statement中设置flushCache=true可以刷新当前的二级缓存,默认情况下如果是select语句,那么flushCache是false。如果是insert、update、delete语句,那么flushCache是true

    如果查询语句设置成true,那么每次查询都是去数据库查询,即意味着该查询的二级缓存失效。

    如果查询语句设置成false,即使用二级缓存,那么如果在数据库中修改了数据,而缓存数据还是原来的,这个时候就会出现脏读。

  • 相关阅读:
    Atitit.Java exe bat  作为windows系统服务程序运行
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结
  • 原文地址:https://www.cnblogs.com/yangang2013/p/5643307.html
Copyright © 2011-2022 走看看