[置顶] Mybatis(九)-缓存

缓存

一级缓存

  将从数据库中加载的数据缓存到内存中,是很多应用程序为了提高性能而采取的一贯做法。Mybatis对通过映射的SELECT语句加载的查询结果提供了内建的一级缓存。默认情况下:启用一级缓存。只要在同一个SqlSession接口对象调用了相同的SELECT语句,都会直接从缓存中返回,而不是查询数据库。

二级缓存

  我们可以在SQL映射器XML配置文件中使用<cache />元素添加全局二级缓存。
 如果我们添加了<cache />元素,将会出现以下情况:
  • 所有的映射语句定义的<select>语句都会被缓存
  • 所有的映射语句定义的<insert>,<update>,<delete>语句将会被刷新缓存
  • 缓存是根据LRU算法管理
  • 缓存不会被任何形式的基于时间表的刷新,不支持定时刷新机制
  • 缓存将存储1024个查询方法返回的列表或者对象的引用
  • 缓存会被当作一个读/写缓存。指检索出的对象不会被共享,并且可以被调用者安全地修改,不会其他潜在的调用者或者线程的潜在修改干扰。(缓存是线程安全的)
当然我们也可以针对做一些默认属性自定义缓存的行为,如下所示:
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
对上面的属性描述的是:
  • eviction:此处定义的缓存的移除机制。默认值是LRU,其可能值有LRU,FIFO,SOFT(软引用,系统发生内存溢出之前回收),WEAK(下次垃圾回收的时候回收)
  • flushInterval:定义缓存刷新间隔,以毫秒计。默认情况下不设置,缓存cache只有调用语句才刷新。
  • size:此表示缓存cache中能容纳的最大元素数。默认值是1024,你可以设置成任意地正整数。
  • readOnly:一个只读缓存cache会对所有的调用者返回被缓存对象的同一个实例,一个读/写缓存cache将会返回被返回对象的一份拷贝(通过序列化)。默认情况下设置为false。可能的值有false和true。
缓存的配置和缓存实例被绑定到映射器配置文件所在的名空间上,只有在相同的命名空间内才能共享cache缓存。
默认的映射语句的cache配置如下:
<select ... flushCache="false" useCache="true"/>
<insert ... flushCache="true"/>
<update ... flushCache="true"/>
<delete ... flushCache="true"/>

你可以认为任意特定的映射语句腹泻默认的cache行为;例如,对一个select语句不使用缓存,可以设置useCache="false"。
除了内建的缓存支持,我们可以使用第三方的集成。


你可能感兴趣的:([置顶] Mybatis(九)-缓存)