08
2020
11

Mybatis中一级缓存与二级缓存?

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

 

● 二级缓存与一级缓存其机制相同,默认也是采用PerpetualCache的HashMap存储,不同在于其存储作用域为Mapper(namespace),并且可自定义存储源,如Ehcache。作用域namespace是指对namespace所对应的配置文件中所有的select操作结果都缓存,这样不同线程之间就可以共用二级缓存。二级缓存可以设置返回的缓存对象策略:<cache readOnly="true">。当readOnly="true"时,表示二级缓存返回给所有调用者同一个缓存对象实例,调用者可以update获取的缓存实例,但是这样可能会造成其他调用者出现数据不一致的情况(因为所有调用者调用的是同一个实例)。当readOnly=“false”时,返回给调用者的是二级缓存总缓存对象的拷贝,即不同调用者获取的是缓存对象不同的实例,这样调用者对各自的缓存对象的修改不会影响到其他的调用者,即是安全的,所以默认是readOnly="false";

 

● 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)进行了C/U/D操作后,默认该作用域下所有select中的缓存将被clear。

 

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。