1. 一级缓存
存储作用域为Session(指的是SQLSession,mapper里面的单个的查询),生命周期最长一次请求结束,当Session flush 或close 之后,该Session 中的所有Cache 就将清空, 默认打开一级缓存。
我觉得一级缓存没什么用,因为生命周期太短。而且在我目前用过的场景里,没有触发过
2. Mybatis二级缓存
二级缓存的作用域是Mapper(namespace)生命周期最长和应用(application)一样长(在没有update,insert,delete语句的情况下)。同一个mapper下的所有语句共享。当当前mapper下有语句执行了update,insert,delete操作,缓存会被清除
二级缓存用的最多的常见其实是重复请求,我第二次请求还能直接获取第一次请求的结果,而不用连接数据库。能够有效减少数据库压力。
我觉得二级缓存是一个很有效的手段。对于一些查询量高。而且请求重复的网站能够有很好的效果。
3. 二级缓存的使用
使用起来其实比较简单。
直接添加在<mapper下面一行,添加如下语句,就是开启了二级缓存
<!--缓存 采用先进先出的方式,每60S刷新一次,最多存储128个引用,缓存只读 -->
<cache eviction="FIFO" flushInterval="60000" size="128" readOnly="true"/>
好了。就这么简单就可以了
4. 二级缓存的适用场景
我在网上看到一篇文章,但是我非常不喜欢这个标题(我写这篇博客的主要目的就是表达:我非常不喜欢标题党)。但是里面的知识点挺好
Mybatis 为什么不要用二级缓存
还有很多类似的文章:为什么推荐使用二级缓存,
我看着非常不舒服。二级缓存是有其适用场景的。但是这个标题取着就给人一种使用二级缓存不好一样。让我很不舒服。
我们根据二级缓存的特征***作用域是Mapper(namespace)生命周期最长和应用(application)一样长(在没有update,insert,delete语句的情况下)。同一个mapper下的所有语句共享。当当前mapper下有语句执行了update,insert,delete操作,缓存会被清除***
适用场景:
查询语句使用频率远远高于insert,update,delete语句
这个mapper都是操作一个表(也就是适合单表操作)
我当前有个业务场景就是有张SeoHot表。个把个把月才更新一次。而且表中字段很少。是非常适合使用二级缓存来优化的