zoukankan      html  css  js  c++  java
  • mybatis缓存机制

    Mybatis系统中默认定义了两级缓存:一级缓存和二级缓存,默认情况下,Mybatis只会开启一级缓存,基于SqlSession级别的。二级缓存需要手动开启和配置,他是基于namespace级别的,

    为了提高可扩展性,Mybatis提供了Cache接口,可以通过实现Cache接口自定义二级缓存。

    一、一级缓存

    1、一级缓存(即本地缓存)是基于SqlSession级别的,当Session flush或close后,该Session中的所有Cache将被清空,本地缓存不能被关闭,但可以调用clearCache()来清空本地缓存或者改变缓存的作用于,在Mybatis3.1之后,可以配置本地缓存的作用域--》在核心配置文件中settings标签中配置localCacheScope(SESSION | STATEMENT)默认为SESSION,也就是在一次会话中,STATEMENT只用在语句执行上,同一个SqlSession数据不会被共享

    测试同一个SqlSession两次查询同一个对象只发了一条查询SQL,而且对象也相等

    2、一级缓存失效的四种方式

    1)同一个SqlSession条件不一样

    2)不同的SqlSession

    3)同一个SqlSession两次查询之间执行了增删改操作

    4)两次查询之间执行了clearCache() 清理了缓存

    二、二级缓存

    也称为全局缓存,基于namespace级别的缓存:一个namespace对应一个二级缓存

    工作机制:

    1)、一个会话,查询一条数据,这个数据就会被放在当前会话的一级缓存中;

    2)、如果会话关闭,一级缓存中的数据会被保存到二级缓存中,新的会话查询息可

    以参照二级缓存中的数据;

    3)、不同的namesapce查出的数据会放在自己对应的缓存中(Map)

    查出的数据都会默认先放在一级缓存中

    只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓中

    二级缓存的使用:

    1)、开启全局二级缓存配置:<setting name="cacheEnabled" value="true"/>

    2)、去mapper.xml中配置使用二级缓存:<cache></cache>

    cache的配置信息

    1、 eviction=“FIFO”: 缓存回收策略:

    • LRU – 最近最少使用的:移除最长时间不被使用的对象。

    • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。

    • SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。

    • WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

    • 默认的是 LRU。

    2、 flushInterval: 刷新间隔,单位毫秒

    • 默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新

    3、 size: 引用数目,正整数

    • 代表缓存最多可以存储多少个对象,太大容易导致内存溢出

    4、 readOnly: 只读, true/false

    • true:只读缓存;会给所有调用者返回缓存对象的相同实例。 因此这些对象

    不能被修改。这提供了很重要的性能优势。

    • false:读写缓存; 会返回缓存对象的拷贝(通过序列化)。这会慢一些,

    但是安全,因此默认是 false。

    3)、pojo需要实现序列化接口

    三、缓存中的配置

    1、(setting)cacheEnabled:true:开启二级缓存, false:关闭二级缓存 一级缓存仍然使用

    2、每个select标签都有一个useCache:默认为true 使用缓存, false:不使用二级缓存,一级缓

    存仍然使用

    3、增删改标签都有一个flushCache:默认为true 刷新缓存测试:《《***一级二级都会都清

    空***》》

    select标签中的flushCache默认为false,如果设置为true每次查询之后都会清空缓存

    4、sqlSession.clearCache():只是清除当前session的一级缓存;

  • 相关阅读:
    ASP.NET 缓存技术分析
    asp.net中两款文本编辑器NicEdit和Kindeditor
    VS2005,VS2008,VS2010将ASP.NET网站编译成一个DLL文件
    公共的Json操作C#类
    怎么把100多个EXCEL文件合并成一个
    C# ToString()方法一些特殊用法
    C# 将数据导出到Execl汇总
    ASP.NET MVC中在Action获取提交的表单数据方法总结
    vue实现锚点定位跳转(当前页面跳转,url不变)
    es6 去除小数点后,不四舍五入
  • 原文地址:https://www.cnblogs.com/rzbwyj/p/11671242.html
Copyright © 2011-2022 走看看