Mybatis缓存

一级缓存

  • 一级缓存为SqlSession缓存,二级缓存为SqlSessionFactory缓存,缓存仅作用于同一namespace
  • SqlSession缓存可以刷新(清空),<select>标签配置中使用flushCache="true"属性
  • 缓存是相互隔离的,不同SqlSession对象之间不共享缓存
  • 数据发生变动后会清除缓存,在数据变动频繁的地方不适宜使用缓存
  • Mybatis会通过算法生成键,与查询结果数据一起放入Map中,读缓存就是读取Map

二级缓存

  • 一级缓存为SqlSession缓存,二级缓存为SqlSessionFactory缓存,缓存仅作用于同一namespace
  • SqlSessionFactory有两种开关
  • 总开关在mybatis-config.xml中<setting name="cacheEnabled" value="true"/>默认打开
  • 分开关在对应的namespace中,默认关闭,使用<cache/>标签即可打开,其信徒众多
  1. type:缓存的实现"类型",默认PERPETUAL,org.apache.ibatis.cache.impl.PerpetualCache,可扩展或替换
  2. eviction:"撤退"的方式,LRU(最近最少使用,默认)、FIFO(先进先出)、SOFT(gc软引用)、WEAK(gc弱引用)
  3. flushInterval:刷新间隔,默认不设置,只有在数据变动时自己刷新;当设置后则按时间刷新
  4. size:缓存数量,默认1024
  5. readOnly:默认false,false表示可写,会反序列化复制一份对象进行读写,较为安全
  6. blocking:阻塞,默认false,不阻塞的方式在并发查询时可能会穿透缓存查询数据库,true会在查询前加锁保证若命中就不查询
原文地址:https://www.cnblogs.com/duduchong/p/13304099.html