Mybatis缓存
正如,大多数持久层框架一样
MyBatis 同样提供了一级缓存和二级缓存的支持
一级缓存
基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session
当 Sessionflush 或 close 之后,该 Session 中的所有 Cache 就将清空。
二级缓存
与一级缓存其机制相同,默认也是采用 PerpetualCache, HashMap 存储
不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源
比如,Ehcache。
更新机制
对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存 Namespaces)的进行了C/U/D 操作后
默认该作用域下所有 select 中的缓存将被 clear
注意事项
1、映射语句文件中的所有 select 语句将会被缓存
2、映射语句文件中的所有 insert, update 和 delete 语句会刷新缓存
3、缓存会使用 Least Recently Used——LRU,最近最少使用算法来收回
4、根据时间表,缓存不会以任何时间顺序来刷新
比如,no Flush Interval,没有刷新间隔
5、缓存会存储列表集合或对象的 1024 个引用
无论查询方法返回什么
6、缓存会被视为是 read/write——可读/可写的缓存
意味着对象检索不是共享的,而且可以安全地被调用者修改
而不干扰其他调用者或线程所做的潜在修改
配置参数
<cache
eviction="FIFO" //回收策略为先进先出
flushInterval="60000" //自动刷新时间 60s
size="512" //最多缓存 512 个引用对象
readOnly="true"/> //只读