缓存

一级缓存(应用缓存)

  • 默认开启,如果要关闭在select 标签上配置flushCache="true"
  • 存在sqlSeesion 生命周期,在同一个sqlSession 中查询时,Mybatis 会把执行的方法和参数通过算法生成缓存的key,将key 和查询结果存入Map对象中,如果同一个sqlSession中执行的方法和参数完全一致,那么通过算法会生成相同的key,当Map 缓存对象中已经存在该key时,会返回缓存中的数据;
  • 任何insert update delete 操作都会清空一级缓存;

二级缓存

  • 存在sqlSessionFactory生命周期中,可以理解为跨sqlSession,缓存是以namespace 为单位,不同nameSpace 下的操作互不影响

  • setting 参数cacheEnabled, 这个参数是二级缓存的全局开关,默认是true, 如果把这个参数这只为false, 即使有后面的二级缓存的配置,也不会生效。

  • 要开启二级缓存,要在sql映射文件中添加配置:
    <cache eviction="FIFO" flushInterval="60000" size="512" readOnlu="true"/>
    上面的语句的意思是:
    下面的所有select 语句都会被缓存;
    映射语句中的insert update delete 会刷新缓存
    缓存会使用(LRU 最近最少使用)算法回收
    根据时间表(如果没有时间缓存不会以任何时间顺序刷新)来刷新
    可读或者可写的

  • 使用<cacheRef ="其他的命名空间"> 使用同一个二级缓存

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容