二级缓存
配置开启二级缓存
在application.yml中配置开启
配置开启后还需在指定的mapper.xml中配置<cache>才能使用二级缓存
配置二级缓存数据保存到redis
- 自定义缓存配置类,需要继承mybatis的cache接口
- 配置类中提供一个redisTemplate来操作redis,此依赖需要使用spring原生的方式getBean()方法来注入
- 重写putObject、getObject等方法
二级缓存的使用过程
开启了二级缓存后,配置了cache的mapper.xmml下的查询sql查询返回的结果会被缓存起来。之后再次访问相同的sql(参数也完全一致)时,会命中缓存,直接将缓存的结果返回
二级缓存的使用场景
应用代码开发过程中通常会使用redis作为缓存,请求到来后先查询redis,缓存未命中后再去查询数据库。 那二级缓存的用武之地是什么呢?我觉得,可以对复杂sql,优化后仍然耗时,但请求参数很少发生变化的sql开启二级缓存,这种sql,当redis缓存未命中,查询数据库时也需要耗费一定的时间,此时就可以开启二级缓存,即便缓存不命中也可以从二级缓存快速返回,这种场景一般是对响应延时容忍度很小的应用使用,不然的话,其实没必要开启二级缓存,徒然增加系统复杂度,增加代码开发量,只用一个redis缓存,缓存未命中直接去查数据库即可。
二级缓存失效场景
1、无条件的查询sql不会被缓存 2、动态sql不会被缓存,mybatis的sql中包含choose、if、foreach、when、otherwise等标签的sql属于动态sql,只有where条件的sql不属于动态sql