二级缓存配置
在mybatis-config.xml中添加配置,Mybaits默认开启,建议明确显示配置,也可以忽略不配置
<setting name="cacheEnabled" value="true"/>
对应的Mapper.xml中添加cache标签,如
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.winte.product.mapper.ProductMapper" >
<cache
eviction="LRU"
flushInterval="600000"
size="512"
readOnly="true" />
</mapper>
相关配置
配置项 | 说明 | 默认 |
---|---|---|
type | cache类型,可以自定义缓存,但是该类必须实现org.apache.ibatis.cache.Cache接口 | PerpetualCache(Map实现) |
eviction | 回收策略。常见的有FIFO,LRU | LRU |
flushInterval | 自动刷新缓存时间(毫秒) | 不刷新,直至失效 |
size | 最多缓存对象的个数 | 1024 |
readOnly | 是否只读,若配置可读写,则需要对应的实体类能够序列化 | false |
blocking | 当缓存中没有key,以阻塞方式运行,同时请求只有一条sql执行 | false |
回收的策略
- LRU – 最近最少使用的:移除最长时间不被使用的对象。
- FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
- SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
- WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
二级缓存在某些情况下,带来的好处远远比不上他所隐藏的危害。
- 缓存是以namespace为单位的,不同namespace下的操作互不影响。
- CUD(create, update, delete )操作会清空所在namespace下的全部缓存
- 多表关联操作不能使用缓存(可用 cache-ref 标签解决)
最后还是建议在服务中使用可控缓存,不建议使用Mybatis二级缓存。