mybatis 的一级缓存和二级缓存

来源:互联网 发布:eia数据公布 编辑:程序博客网 时间:2024/06/06 16:32

1. 一级缓存(本地缓存)

本地缓存是指与数据库同一次会话期间查询到的数据会放到本地缓存中,如果需要获取相同的数据,从缓存中拿,没必要访问数据库。
sqlsession级别,本地缓存一直开启。

1.本地缓存失效的情况

a. sqlsession不同  b. 本地缓存中没有这个数据c. 相同的查询之间有增删改操作

2. 二级缓存(全局缓存)

二级缓存基于namespace级别的缓存,一个namespace对应一个二级缓存

工作机制:
前提是在同一个sqlSessionFactory
1. 一个会话查询数据,这个数据就会放在一级缓存中
2. 会话关闭,这个数据就放在二级缓存中,新的会话会参照二级缓存
3.不同namespace查出的数据会放在自己对应的缓存中
二级缓存的使用:
1.全局配置

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

2.在mapper中配置二级缓存(写数据库语句的xml文件)

<cache flushInterval="" eviction="" readOnly="" size="" type="" blocking=""></cache>

flushInterval: 缓存清空间隔,默认不清空
eviction:缓存的回收策略
readOnly:是否只读,
为 true的时候mybatis认为所有从缓存读取数据的操作是只读操作,mybatis为了加快速度,mybatis直接会把缓存的引用交给用户
false
mybatis觉得获取的数据可能被修改,就用序列化和反序列化复制一份数据给用户,速度慢点。
size:缓存大小
type:自定义缓存的全类名,实现Cache即可
blocking

**3.我们的实体类需要实现序列化**
原创粉丝点击