zoukankan      html  css  js  c++  java
  • mybatis缓存(一,二级别)

    数据查找过程:

    • 二级缓存(默认关闭) -> 一级缓存(默认开启) -> 数据库

    一级缓存:

    • 一级缓存是SqlSession自带的。SqlSession对象被创建,一级缓存就存在了。//是针对每一个sqlSession进行缓存。
    • 如果SqlSession对象关闭或调用清理方法,会导致缓存失效。
    • 缓存底层实现就是通过HashMap实现的。
    • 一级缓存介质——内存

    如果 执行sqlsession的DML等操作,会执行commit(提交事务),最终会清空缓存(flush)。sqlSession对象销毁,一级缓存数据不存在了。sqlSession与SqlSession之间的一级缓存互相不影响。

    二级缓存:

    二级缓存是针对每个mapper相同 的namespace进行缓存每个SqlSession都会首先调用mapper下的sql语句,每个mapper缓存各自的数据(存储了查询的结果集(java对象))。
    每个SqlSession都可以访问到二级缓存中的数据(二级缓存SqlSessionFactory进行管理的),sqlsession对象销毁,mapper中的二级缓存数据仍然存在。

    • 二级缓存介质——内存,硬盘(内存不够走硬盘)
    • 二级缓存SqlSessionFactory(多个SqlSession共享)进行管理的。

    .二级缓存的原理:

    • Mybatis框架提供了Cache接口,缓存组件(比如redis)实现接口。//用redis做mybatis二级缓存:首先开启全局配置开关,然后编写cache的实现类,重写方法,然后在xxxClass的mapper文件里在<cache />标签里设置type属性,指定缓存实现类

    二级缓存配置:

    1.打开总开关: 
    在核心配置文件SqlMapConfig.xml中加入

    <!--注意顺序-->
    <setting name="cacheEnabled" value="true"/>

    2.在需要开启二级缓存的mapper.xml中加入caceh标签  <caceh/>

    3.二级缓存的POJO类实现Serializable接口

    二级缓存失效情况:

    1.在查询select标签内设置useCache="false",强制关闭二级缓存,如果要使用,得打开

    <selectid="getStuById" parameterType="Integer"resultType="Student" useCache="false">

    selectstu_id stuId,stu_name stuName from tbl_student where stu_id=#{stuId}

    </select>

    2.在执行DML操作时刷新缓存

    <updateid="updateStu"parameterType="com.atguigu.mybatis.entity.Student" flushCache="true">

    updatetbl_student set stu_name=#{stuName} where stu_id=#{stuId}

    </update>

    这是默认设置(不启动二级缓存),通常不必修改

    二级缓存使用场景:

    前提:

    1.对于查询多,DML少,实时性要求不高(缓存一般都用在这种场景)

    2.只有单表操作的表上使用二级缓存,并且所有关于这个表的操作都得在一namespace下   //其他namespace下,包含这个表的操作,那么数据不一致。比如user表,role表,userRole表,不管userRole表的查询放到user的namespace下,还是role的namespace下,user或role的表数据变更后,都会导致userRole的查询有误差

  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/brxHqs/p/9723822.html
Copyright © 2011-2022 走看看