Mybatis复习笔记(缓存)

一级缓存

本地缓存(Map): 与数据库同一次会话期间查询到的数据会放在本地缓存中
		如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库
		(类似于在同一个“事务”中多次查询不会多次查询数据库)

	失效情况: 
	1.多个sqlSession对象查询(多个会话会创建自己的本地缓存)
	2.查询不同的条件
	3.两次查询之间执行了增删改操作
	4.手动清除了本地缓存  sqlSession.clearCache()

二级缓存

全局缓存:本地缓存的局限性,多次会话不能共享数据(多个sqlSession对象)
		基于namespace级别的缓存,一个namespace对应一个二级缓存
		工作机制:
		1.一个会话查询数据,这个数据就会被放在当前会话的一级缓存中
		2.如果当前会话关闭,对应一级缓存的数据会被保存到二级缓存中
		3.新的会话查询。就可以参照二级缓存
		mapper文件(namespace)(二级缓存) -> sqlsession通过mapper文件查询数据(一级缓存)
		每个sqlsession都会基于mapper文件创建,所以二级缓存是全局缓存
# 开启全局二级缓存
## mybatis全局配置文件中settings
cacheEnabled   true
<setting name="cacheEnable" value="true" /> 
## mapper文件中的<mapper>标签下添加cache标签
	<cache eviction="" flushInterval="" readOnly="" size="" type=""></cache>
	### 回收策略 属性eviction
		LRU:最近最少使用的
		FIFO:先进先出
		SOFT:软引用
		WEAK:弱引用
	### 缓存刷新间隔 flushInterval 缓存多长时间清空一次
		默认不清空
	### 缓存是否只读 readOnly
		true 只读 mybatis认为每次都只是获取数据操作,所以会直接将数据引用交给用户,提高效率,不安全
		false 非只读,mybatis认为每次操作都可能会修改数据,所以会使用序列化和反序列化克隆一份数据,默认
	### 缓存存放多少元素 size
	### 自定义缓存的全类名  实现cache接口,一般使用默认的
		

缓存相关配置

1.cacheEnable = true  开启缓存  false 只关闭二级缓存   (settings配置)
2.每个select标签默认都有useCache = "true" false 只关闭二级缓存
3.每个增删改标签默认都有flushCache="true" 每次执行完之后会删除缓存,一二级缓存都清除
	查询标签添加flushCache="true" 每次执行完删除缓存,就相当于没有使用缓存
4.sqlSession.clearCache() 只清除一级缓存,因为是会话方法	(sqlSession方法)
5.localCacheScope 本地缓存作用域,默认SESSION开启一级缓存,STATEMENT关闭一级缓存 (settings配置) 

原理图

在这里插入图片描述

第三方cache

   mybatis-ehcache
https://mybatis.org/ehcache-cache/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值