Mybatis的一级二级缓存
Mybatis提供了缓存机制,可以减轻数据库的压力,提高性能
Mybatis的缓存分为两级:一个是一级缓存,一个二级缓存
一级缓存:即默认使用的缓存SqlSession级别的缓存,只在sqlsession内有效
二级缓存:mapper级别的缓存,同一个namespace公用一个缓存,所以对sqlsession是共享的
一级缓存:具体流程如下:
1,第一次执行select的时候,会把查到的数据写入sqlsession里面的hashmap里面缓存起来
2,然后第二次查询的时候,会从缓存中查数据,如果传入的参数相同,那么就直接从缓存中返回数据,而不去查数据库,因此提高了效率。
但是要注意:当你去对数据库进行操作(inset,update,delete)的时候,会清空当前sqlsession里面的所有缓存,以此来保证数据库数据与缓存
数据一致。当你执行cleanCach()这个方法的时候,也会清空缓存。
顺便提一句,mybatis的缓存是基于【namespace:sql语句:参数】来进行缓存的,sqlsession用hashmap进行缓存的时候,是用
【namespace:sql语句:参数】作为key,,查询返回的语句作为value保存的。
二级缓存:是mapper级别的缓存,也是就同一个namespace的mapper.xml,多个sqlsession使用同一个mapper操作数据的时候,得到的数据会
缓存在同一个区域
这个二级缓存是默认不开启的,因此要去设置一下
如果不是用springboot,那需要在mybatis-config.xml配置文件里面加入这个设置:
这个默认是false,所以开启一下
<settings>
<setting name="cacheEnabled" value="true"/>默认是false:关闭二级缓存
<settings>
如果是springboot,则不用这个mybatis-config,xml也行
在application.properties里面加上这一句:
#开启二级缓存
mybatis.configuration.cache-enabled=true
也可以起到哦同样的作用
最后也要在mapper.xml文件里面配置一下:
加入<catch/>标签
<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>当前mapper下所有语句开启二级缓存
这里简单说一下eviction回收策略:有四个(默认是LRU)
1,LRU:用的最少的,长时间不用的去掉
2,FIFO:先进先出按进入缓存的顺序去掉
3,SOFT:基于垃圾回收状态和软引用规则
4,WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
flushInterval:刷新时间,size:容量,readONly:只读(开启) 如此大体流程如下:
1,当执行一次sqlsession的select的时候,在关闭sqlsession后会把查询结果存到二级缓存里面
2,当另外一个sqlsession执行select的时候,首先它会在自己的一级缓存里面找,如果找不到,那就去二级缓存里面找
找到了就不用去查询数据库,从而减少了数据库的压力,提高了查询速度。
这个二级缓存清空也和一级缓存一样,如果有操作数据库,那么会清空缓存的,防止数据不一致。 以上。
Mybatis的一级二级缓存的更多相关文章
- Mybatis学习(五)————— 延迟加载和缓存机制(一级二级缓存)
一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的数据的话,就不查询从表的信息.所以这就是突出了懒这个特点.真是懒啊. Mybati ...
- Mybatis(五) 延迟加载和缓存机制(一级二级缓存)
踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WH 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表的 ...
- Spring + MySQL + Mybatis + Redis【二级缓存】
一.Redis环境 Redis 官网 :http://redis.io/ windows下载:https://github.com/dmajkic/redis/downloads 1.文件解压缩 2. ...
- 【MyBatis学习13】MyBatis中的二级缓存
1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...
- mybatis整合redis二级缓存
mybatis默认开启了二级缓存功能,在mybatis主配置文件中,将cacheEnabled设置成false,则会关闭二级缓存功能 <settings> <!--二级缓存默认开启, ...
- Mybatis使用Redis二级缓存
在Mybatis中允许开发者自定义自己的缓存,本文将使用Redis作为Mybatis的二级缓存.在Mybatis中定义二级缓存,需要如下配置: 1. MyBatis支持二级缓存的总开关:全局配置变量参 ...
- Mybatis五(一级二级缓存、第三方缓存)
一级缓存 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言.所以在参数和SQL完全一样的情况下,我们使用同一个SqlSess ...
- mybatis一级二级缓存
一级缓存分析 不需要任何配置 ,mybatis本身带有 一级缓存是SqlSession范围的缓存,当调用SqlSession的修改,添加,删除,commit(),close()等方法时,就会清空一级缓 ...
- 延迟加载以及mybatis一级二级缓存
延迟加载 延迟加载:在真正使用数据时才发起查询,不用的时候不查询,又叫按需查询(懒加载) 立即加载:不管用不用,只要调用方法,直接发起查询 表关系:一对多 多对一 一对一 ...
随机推荐
- 转载别人的ognl
一.循环遍历集合 1.在jsp中引入标准函数声明<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix=" ...
- 第一篇(那些JAVA程序BUG中的常见单词)
The local variable xxx may not have been initialized. 局部变量xxx可能尚未初始化 local variable 局部变量 initialized ...
- iOS APNs远程推送流程精简版
1.去Apple Developer Center里创建应用的信息,指定APP ID(Bundle ID),配置里开启推送功能(Push Notifications). 后续步骤需要用到这个应用的包名 ...
- linux unzip和zip
注:*压缩成限.zip格式文件 常用解压缩: [root@mysql test]# unzip -o test.zip -d tmp/ 将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同 ...
- 进击的Python【第十章】:Python的高级应用(多进程,进程间通信,协程与异步,牛逼的IO多路复用)
Python的socket高级应用(多进程,协程与异步) 一.多进程multiprocessing multiprocessing is a package that supports spawnin ...
- [Usaco2005]Part Acquisition
Description The cows have been sent on a mission through space to acquire a new milking machine for ...
- AC自动机 HDOJ 2222 Keywords Search
题目链接 题意:每个文本串的出现次数 分析:入门题,注意重复的关键字算不同的关键字,还有之前加过的清零. 新模板,加上last跑快一倍 #include <bits/stdc++.h> ...
- 题解报告:hdu 1421 搬寝室(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421 Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9 ...
- D. Artsem and Saunders 数学题
http://codeforces.com/contest/765/problem/D 这题的化简,不能乱带入,因为复合函数的带入,往往要严格根据他们的定义域的 题目要求出下面两个函数 g[h(x)] ...
- 多功能Markdown编辑器MarkdownPad 2的下载、安装和初步使用步骤(图文详解)(博主推荐)
不多说,直接上干货! MarkdownPad 是什么? 一.MarkdownPad 2的下载 http://markdownpad.com/download/markdownpad2-setup. ...