IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mybatis的缓存机制及其使用 -> 正文阅读

[大数据]Mybatis的缓存机制及其使用

一、什么是缓存(Cache),缓存有什么作用

(1)存在内存中的临时数据。

(2)将用户经常查询的数据放在缓存(内存)中,用户查询数据时就不需要在从磁盘上(关系型数据库数据文件)查询,直接从缓存中查询;从而提高了查询效率,解决了高并发系统的性能问题。

(3)什么样的数据能使用缓存:经常查询且不经常改变的数据。

作用:减少了和数据库的交互次数,减少了系统的开销,提高了系统效率;

二、Mybatis的缓存

(1) MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。

(2)MyBatis 系统中默认定义了两级缓存:一级缓存和二级缓存

a、默认情况下,只有一级缓存开启。( SqlSession 级别的缓存,也称为本地缓存)。

b、二级缓存需要手动开启和配置,他是基于 namespace 级别的缓存。

c、为了提高扩展性, MyBatis 定义了缓存接口 Cache ,我们可以通过实现 Cache 接口来自定义二级缓存。

三、一级缓存

缓存失效的情况:

1、查询不同的东西

2、增删改操作,改变了原来的数据

3、查询了不同的Mapper.xml

4、手动清理了缓存

手动清理缓存:

sqlSession.clearCache();

小结:一级缓存默认开启的,只在一次sqlSession中有效,也就是拿到连接和关闭连接这个区间中有效,一级缓存就是一个Map。

四、二级缓存

(1)二级缓存也叫全局缓存,一级缓存作用城太低了,所以诞生了二级缓存

(2)基于 namespace 级别的缓存,一个名称空间,对应一个二级缓存;

(3)工作机制:
a、一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中;
b、如果当前会话关闭了,这个会话对应的一级缓存就没了:但是我们想要的是,会话关闭了,一c级缓存中的数据被保存到二级缓存中;
d、新的会话查询信息,就可以从二级缓存中获取内容;
e、不同的 mapper 查出的数据会放在自己对应的缓存( map )中;

实现二级缓存的步骤;:

(1)开启全局缓存:

<settings>
        <setting name="cacheEnabled" value="true"/>
</settings>

(2)Mapper中开启二级缓存

直接开启:

<cache/>

自定义参数:

<cache eviction="FIFO"
           flushInterval="60000"
           size="512"
           readOnly="true"
/>

小结:

(1)只要开启二级缓存在同一个Mapper下就有效

(2)所有的数据会先放在一级缓存中

(3)只有当会话提交时,或者关闭时,才会提交到二级缓存中

五、自定义缓存--ehcache

Ehcache是一种广泛使用的开源Java分布式缓存,主要面向通用缓存

(1)使用时要导包:

<!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache -->
<dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-ehcache</artifactId>
    <version>1.2.1</version>
</dependency>

(2)Mapper中:

<cache type="org.mybatis.caches.ehcacheCache"/>

(3)配置缓存:

<defaultCache
maxElementsInMemory="10000"
//缓存中最大允许创建的对象数
eternal="false"
//缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期
timeToIdleSeconds="120"
//缓存数据钝化时间(设置对象在它过期之前的空闲时间)
timeToLiveSeconds="120"
//缓存数据的生存时间(设置对象在它过期之前的生存时间)
overflowToDisk="true"
//内存不足时,是否启用磁盘缓存
/>

下面是自己的ehcache.xml 的配置

<ehcache>

? ? ?<!--?
? 设置缓存文件 .data 的创建路径。
? 如果该路径是 Java 系统参数,当前虚拟机会重新赋值。
? 下面的参数这样解释:参考http://www.wityx.com
? user.home ? ? ?– 用户主目录
? user.dir ? ? ? – 用户当前工作目录
? java.io.tmpdir – 默认临时文件路径?
?-->
? ? <diskStore path="java.io.tmpdir"/>

? ? <!-- 缺省缓存配置。CacheManager 会把这些配置应用到程序中。

? ? ? ? 下列属性是 defaultCache 必须的:

? ? ? ? maxInMemory ? ? ? ? ? - 设定内存中创建对象的最大值。
? ? ? ? eternal ? ? ? ? ? ? ? - 设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超时限制且元素永不消亡。
? ? ? ? timeToIdleSeconds ? ? - 设置某个元素消亡前的停顿时间。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?设置该属性也无用)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如果该值是 0 就意味着元素可以停顿无穷长的时间。
? ? ? ? timeToLiveSeconds ? ?- 为元素设置消亡前的生存时间。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?也就是一个元素从构建到消亡的最大时间间隔值。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?这只能在元素不是永久驻留时有效。
? ? ? ? overflowToDisk ? ? ? ?- 设置当内存中 缓存达到 maxInMemory 限制时元素是否可写到磁盘
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?上。
? ? ? ? -->

? ? <defaultCache name="com.cader.MethodCache"
? ? ? ? maxElementsInMemory="10000"
? ? ? ? eternal="false"
? ? ? ? overflowToDisk="true"
? ? ? ? timeToIdleSeconds="120"
? ? ? ? timeToLiveSeconds="120"
? ? ? ? diskPersistent="false"
? ? ? ? diskExpiryThreadIntervalSeconds="120"
? ? ? ? />
</ehcache>

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:12:55  更:2022-04-29 12:14:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:19:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码