Mabatis的二级缓存

2024-06-04 19:52
文章标签 mabatis 二级缓存

本文主要是介绍Mabatis的二级缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mybatis默认情况下二级缓存是关闭的,需要手工的配置开启,在开启之前,我们先说说二级缓存的基本知识点:

1.二级缓存又称为全局缓存,它是基于namespace级别的缓存,一个名称空间对应一个二级缓存,也就是说一般情况下同一个映射文件中的查询都共享一个共同的二级缓存空间。

2.一级缓存的生命周期随着一次会话session的关闭而清空,开启二级缓存的情况下,一级缓存里的数据,在清空或者提交之前会转存到二级缓存的空间中继续存在。

3.当一次会话sqlsession的缓存里如果存放着两个不同类型的对象,比如User和Role对象,当一级缓存清空之前,开起二级缓存的情况下,它们两个对象会分别存入各自的名称空间的二级缓存空间中;直白地时候就是一级缓存中两个对象是放在同一Map对象(缓存就是Map对象),在二级缓存中两个对象是分别放在两个独立的Map对象里的(各自的缓存空间里)。

使用二级缓存的实验:

1.开启二级缓存:

①全局变量cacheEnabled设置为true

②在映射文件中添加一个标签

这个简单语句的效果如下:

  • 映射语句文件中的所有 select 语句将会被缓存。
  • 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
  • 缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
  • 根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
  • 缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
  • 缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

这个标签中还有很多与缓存有关的属性:

eviction可用的收回策略有:

  • LRU – 最近最少使用的:移除最长时间不被使用的对象。
  • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  • SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
  • WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

默认的是 LRU。

flushInterval(刷新间隔)

可以被设置为任意的正整数,而且它们代表一个合理的毫秒 形式的时间段。默认情况是不设置,也

就是没有刷新间隔,缓存仅仅调用语句时刷新。

size(引用数目)

可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的 可用内存资源数目。默认值

是 1024。

readOnly(只读)属性可以被设置为 true 或 false。

只读的缓存会给所有调用者返回缓 存对象的相同实例。因此这些对象不能被修改。这提供了很重

要的性能优势。可读写的缓存 会返回缓存对象的拷贝(通过序列化) 。这会慢一些,但是安全,因此

默认是 false。

③Mybatis的二级缓存使用的序列化接口,所以,我们要使用二级缓存,我们的JavaBean就必须实现序列化接口

这篇关于Mabatis的二级缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030962

相关文章

Java Web:Spring Boot + Mybatis + Redis二级缓存

Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一。Mybatis是一个十分轻量好用的ORM框架。Redis是当今十分主流的分布式key-value型数据库,在web开发中,我们常用它来缓存数据库的查询结果。 本篇博客将介绍如何使用Spring-Boot快速搭建一个Web应用,并且采用Mybatis作为我们的ORM框架。为了提升性能,我们将

【MyBatis学习13】MyBatis中的二级缓存

1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的。为了更加清楚的描述二级缓存,先来看一个示意图: 从图中可以看出: 1.sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到该UserMapper的二级缓存中。2.

mybatis特殊符号处理,mybatis一级二级缓存,java反射机制

mybatis特殊符号处理 在 mybatis 中的 xml 文件中,存在一些特殊的符号,比如:<、>、"、&、<>等,正常书写 mybatis 会报错,需要对这些符号进行转义。具体转义如下所示: 特殊字符 转义字符 <  &lt; >  &gt; "  &quot; ’  &apos; &  &amp; 除此之外,还可以使用印射文件特殊处理,因为sql印射文件时xml类型文件,在转义上面有些

二级缓存处理echache.xml解析

二级缓存处理echache.xml解析 <!-- Ehcache2.x的变化(取自https://github.com/springside/springside4/wiki/Ehcache) --><!-- 1)最好在ehcache.xml中声明不进行updateCheck --><!-- 2)为了配合BigMemory和Size Limit,原来的属性最好改名 --><!--

MyBatis一级缓存和二级缓存以及 mybatis架构

缓存 数据缓存,让数据离我们执行的程序更近一点,让程序能够快速的获取到数据 缓存的作用就是减轻数据库的压力,提高查询性能。缓存实现的原理是从数据库中查询出来的对象在使用完后不要销毁,而是存储在内内(缓存)中,当再次需要获取该对象时,直接从缓存中直接获取,不再向数据库只是select语句,从而减少数据库的查询压力 mybatis一级缓存 一级缓存默认是SqlSession级别的,在每一个Sq

【Hibernate】二级缓存

上篇博客简单介绍了hibernate的一级缓存,也就是session级别的缓存,它的生命周期和会话是相同的,不同的会话之间的缓存不能共享。二级缓存也称为进程级的缓存或sessionFactory级的缓存,它可以被所有的会话共享,二级缓存的生命周期和sessionFactory的生命周期一致,sessionFactory可以管理二级缓存。      hibernate没有提供相应的二级缓存

【mybits】一级缓存和二级缓存

mybatis的一级缓存和二级缓存最大的区别是作用范围不同,如下图,一级缓存是SqlSession级别的缓存,不同的SqlSession之间的缓存数据区域是互相不受影响的;二级缓存是mapper级别的缓存,多个SqlSession可以共用二级缓存。          如果SqlSession只选commit(增删改)操作,一级缓存和二级缓存都需清空缓存区,保证缓存中存储的是最新的数

Mabatis-入门

一、认识Mybatis mybatis参考网址:http://www.mybatis.org/mybatis-3/zh/index.html Github源码地址:https://github.com/mybatis/mybatis-3 二、ORM是什么 对象-关系映射(Object Relational Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。把对象模

深入了解MyBatis二级缓存

一、创建Cache的完整过程 我们从SqlSessionFactoryBuilder解析mybatis-config.xml配置文件开始: Reader reader = Resources.getResourceAsReader("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactory

【MyBatis学习8】MyBatis中的二级缓存

1. 二级缓存的原理   前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的。为了更加清楚的描述二级缓存,先来看一个示意图:      从图中可以看出: sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到该UserMapper的二级缓存中