美文网首页
MyBatis缓存配置

MyBatis缓存配置

作者: Doooook | 来源:发表于2020-07-19 10:28 被阅读0次

这篇我们讲MyBatis的缓存配置,关于MyBatis缓存请参看MyBatis缓存
在xml配置爱中添加如下内容:

<cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
    select 
    <include refid="Base_Column_List" />
    from t_student
    where id = #{id,jdbcType=INTEGER}
  </select>

这里我们讨论一下它们的属性。

  • eviction:代表的是缓存回收策略,目前MyBatis提供以下策略。
    (1)LRU,最近最少使用的,移除最长时间不用的对象。
    (2)FIFO,先进先出,按对象进入缓存的顺序来移除它们。
    (3)SOFT,软引用,移除基于垃圾回收器状态和软引用规则的对象。
    (4)WEAK,弱引用,更积极地移除基于垃圾收集器状态和弱引用规则的对象。这里采用的是LRU,移除最长时间不用的对象。
  • flushInterval:刷新间隔时间,单位为毫秒,这里配置的是100秒刷新,如果你不配置它,那么当SQL被执行的时候才会去刷新缓存。
  • size:引用数目,一个正整数,代表缓存最多可以存储多少个对象,不宜设置过大。设置过大会导致内存溢出。这里配置的是1024个对象。
  • readOnly:

只读,属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。 因此这些对象不能被修改。这就提供了可观的性能提升。而可读写的缓存会(通过序列化)返回缓存对象的拷贝。速度上会慢一些,但是更安全,因此默认值是 false。
(1)只读的缓存会给所有调用者返回缓存对象的相同实例。 因此这些对象不能被修改。这就提供了可观的性能提升。而可读写的缓存会(通过序列化)返回缓存对象的拷贝。速度上会慢一些,但是更安全,因此默认值是 false。
(2)也就是说,当你设置readOnly=true的时候,cache里面存放对象引用,用户A从cache里面取出对象之后,如果A对对象进行了修改,其他用户B再从cache取出对象,则会发现对象已经被修改。设置readOny=true的目的是:告诉用户不要从缓存中取出之后,对对象进行修改。
(3)cache里面存放对象的序列化,用户A从cache里面取出对象之后,如果A对对象进行了修改,其他用户B再从cache取出对象,对象是不会变的。设置readOny=false的目的是:告诉用户从缓存中取出之后,可以对对象进行修改,而不影响cache里面的对象。

<!-- 可以在Mapper的具体方法下设置对二级缓存的访问意愿:
    1. useCache配置,如果一条语句每次都需要最新的数据,就意味着每次都需要从数据库中查询数据,可以把这个属性设置为false
    2. 刷新缓存(就是清空缓存),二级缓存默认会在insert、update、delete操作后刷新缓存,可以手动配置不更新缓存
  -->

  <!--
    1)当为select语句时:
      flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。
      useCache默认为true,表示会将本条语句的结果进行二级缓存。
    2)当为insert、update、delete语句时:
      flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。
      useCache属性在该情况下没有。
      update 的时候如果 flushCache="false",则当你更新后,查询的数据数据还是老的数据。
  -->
<!--  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" useCache="false" flushCache="true">-->
<!--  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" useCache="false" flushCache="true">-->
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" flushCache="true">
    select
    <include refid="Base_Column_List" />
    from t_student
    where id = #{id,jdbcType=INTEGER}
  </select>

相关文章

  • MyBatis缓存配置

    这篇我们讲MyBatis的缓存配置,关于MyBatis缓存请参看MyBatis缓存。在xml配置爱中添加如下内容:...

  • Springboot多模块搭建 一WEB构建

    web 项目结构 config目录 缓存配置 邮件配置 mybatis配置 redis配置 启动项 mybatis...

  • mybatis源码之二 缓存

    mybatis源码之二 缓存 1:一级缓存设置 1.1:mybatis-config文件配置 1.2: 测试代码...

  • JavaEE基础知识学习----MyBatis(五)缓存机制

    MyBatis的缓存机制 概述 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可...

  • mybatis:在springboot中的配置

    Mybatis 配置 使全局的映射器启用或禁用缓存。mybatis.configuration.cache-ena...

  • MyBatis缓存

    MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。MyBatis缓存分为一级缓存和二...

  • mybatis开启二级缓存

    mybatis开启二级缓存 1.修改配置文件mybatis-config.xml加入 ,全局配置参数,需要时再设置...

  • Mybatis缓存配置

    pom文件配置: spring加载ehcache配置文件 ehcache.xml: mybatis.xml开启缓存...

  • mybatis 二级cache

    一:mybatis 介绍cache和使用cache mybatis自带的缓存构架,方便配置、功能强大、定制方便。默...

  • 关于Mybatis的几件小事(二)

    一、MyBatis缓存机制 1.简介 Mybatis包含了一个非常强大的查询缓存的特性,它可以非常方便地配置和定制...

网友评论

      本文标题:MyBatis缓存配置

      本文链接:https://www.haomeiwen.com/subject/qtjlkktx.html