Mybatis-二级缓存

2018-01-31 11:17:30来源:oschina作者:特拉仔人点击

分享

首先,不建议使用它,因为很容易出现脏数据,所以去百度一把使用redis或者memCache去实现更高层级的统一缓存,避免出现脏数据。


从Mybatis 的官方文档就可以看出来非常的简单,估计他们自己都不推荐使用此功能。


说说它的用法吧。


Mybatis除了一级缓存外,还拥有二级缓存,它是针对一个mapper文件的,被多个SqlSession共享,开启二级缓存后数据查询流程是:二级缓存 -> 一级缓存 -> 数据库


它只有当SqlSession更新完成或者回滚完成后才会更新,且增删改操作不能设置flushCache=true。在实际变成过程中就意味着必须显示的提交或者回滚或者关闭SqlSession才能触发查询结果被更新到缓存中


开启二级缓存,步骤如下:


1.在全局配置文件中的标签中配置


2.在mapper文件中添加标签,该标签配置后默认具有下面的能力


2.1缓存mapper文件中的所有select结果


2.2增删改会立刻刷新1、2级缓存


2.3缓存满后清理规则为LRU(a Least Recently Used)


2.4缓存默认大小为1024


2.5缓存无自动刷新


2.6缓存是读写模式


标签的几个属性:


eviction:缓存清理规则,取值有LRU ,FIFO ,SOFT ,WEAK四种方式 ,默认值为LRU


flushInterval:设置自动刷新时间,默认值为不设置


size:设置缓存可以存放引用的大小,默认值为1024


readOnly:设置缓存是否只读,取值有TRUE和FALSE,默认值为FALSE,如果为TRUE,则所有相同的sql语句返回的是同一个对象(有助于提高性能,但并发操作同一条数据时,可能不安全,但速度更快),如果设置为FALSE,则相同的sql,后面访问的是cache的clone副本

就算开启了二级缓存,你依然可以在