Mybatis缓存
2019-02-28 本文已影响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。