Mybatis缓存

作者: 勿念及时雨 | 来源:发表于2019-02-28 00:06 被阅读3次

和Hibernate框架一样,Mybatis的缓存也分为一级缓存二级缓存

一级缓存

基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close之后该Session中所有的Cache将会被清空。

二级缓存

二级缓存与一级缓存机制相同,默认采用PerpetualCache的HashMap存储,不同在于其存储作用域为Mapper(Namespace)并且可以自定义存储源,如Ehcache,作用域为namespace是指对该namespace对应的配置文件中所有的select操作结果都缓存,这样不同线程之间就可以共用二级缓存。

启用二级缓存

在mapper配置文件中添加:

<cache/>

二级缓存设置返回的缓存对象策略

当readOnly="true"时,表示二级缓存返回给所有调用者同一个缓存对象实例,调用者可以update获取的缓存实例,但是这样可能造成其他调用者出现数据不一致的情况,当readOnly="false"时,返回给调用者的是二级缓存总缓存对象的拷贝,即不同调用者获取的是缓存对象不同的实例,这样调用者对各自的缓存对象的修改不会影响到其他调用者,即是安全的,所以默认readOnly="false"

缓存更新机制

当某个作用域(一级缓存Session/二级缓存NameSpaces)的进行了增删改操作后,默认该作用域下所有select中的缓存将会被clear。

相关文章

网友评论

    本文标题:Mybatis缓存

    本文链接:https://www.haomeiwen.com/subject/glkcuqtx.html