Mybatis cache 配置

Scroll Down

二级缓存配置

在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>

相关配置

配置项说明默认
typecache类型,可以自定义缓存,但是该类必须实现org.apache.ibatis.cache.Cache接口PerpetualCache(Map实现)
eviction回收策略。常见的有FIFO,LRULRU
flushInterval自动刷新缓存时间(毫秒)不刷新,直至失效
size最多缓存对象的个数1024
readOnly是否只读,若配置可读写,则需要对应的实体类能够序列化false
blocking当缓存中没有key,以阻塞方式运行,同时请求只有一条sql执行false
回收的策略
  1. LRU – 最近最少使用的:移除最长时间不被使用的对象。
  2. FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  3. SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
  4. WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

二级缓存在某些情况下,带来的好处远远比不上他所隐藏的危害。

  1. 缓存是以namespace为单位的,不同namespace下的操作互不影响。
  2. CUD(create, update, delete )操作会清空所在namespace下的全部缓存
  3. 多表关联操作不能使用缓存(可用 cache-ref 标签解决)

最后还是建议在服务中使用可控缓存,不建议使用Mybatis二级缓存。