缓存
什么是缓存
存储在运行内存中的数据 -- 缓存数据
计算机的存储方式效率不高,因此会将一些数据放在内存中
- 数据的清空机制
- 数据的复用机制
为什么要用缓存
部分数据不要求实时性,并且使用频率较高,可以将此数据缓存到内存中
一级缓存
事务缓存 sqlsession
mybatis默认开启了一级缓存
在同一个事务中,默认将sql查询结果进行缓存,如果之后还需要执行相同的sql语句,默认不会再次查询
如果保存查询结果之后,进行了相关表的更新操作(添加,删除,修改),清空之前保存的数据
二级缓存
应用级缓存
同一个configuration对象中有效
缓存所有的查询结果,更新操作会刷新缓存结果
实现步骤
1、开启mybatis二级缓存,需要在configuration配置文件中进行配置
<settings>
<!-- 开启二级缓存 默认值为true -->
<setting name="cacheEnabled" value="true"/>
</settings>
2、需要保存的对象都必须实现序列化接口
Serializable
3、需要mapper配置文件中进行缓存设置
eviction:代表的是缓存回收策略,目前MyBatis提供以下策略。
(1) LRU,最近最少使用的,一处最长时间不用的对象
(2) FIFO,先进先出,按对象进入缓存的顺序来移除他们
(3) SOFT,软引用,移除基于垃圾回收器状态和软引用规则的对象
(4) WEAK,弱引用,更积极的移除基于垃圾收集器状态和弱引用规则的对象。这里采用的是LRU,
移除最长时间不用的对形象
flushInterval:刷新间隔时间,单位为毫秒,这里配置的是100秒刷新,如果你不配置它,那么当
SQL被执行的时候才会去刷新缓存。
size:引用数目,一个正整数,代表缓存最多可以存储多少个对象,不宜设置过大。设置过大会导致内存溢出。
这里配置的是1024个对象
readOnly:只读,意味着缓存数据只能读取而不能修改,这样设置的好处是我们可以快速读取缓存,缺点是我们没有
办法修改缓存,他的默认值是false,不允许我们修改
<cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"/>
三级缓存
一般会采用NoSQL数据库进行缓存操作
将查询结果存储到NoSQL数据库 - 散列算法(目前查询效率最高的算法)
Redis