- 0
- 0
- 约2.08万字
- 约 17页
- 2021-10-19 发布于福建
- 举报
缓存概述
正如大多数持久层框架一样, MyBatis 同样提供了一级缓存和二级缓存的
支持;
一级缓存基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为
Session ,当 Session flush 或 close 之后,该 Session 中的所有 Cache
就将清空。
二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache ,
HashMap存储,不同在于其存储作用域为 Mapper(Namespace) ,并且可自
定义存储源,如 Ehcache 、Hazelcast 等。
对于缓存数据更新机制,当某一个作用域 ( 一级缓存 Session/ 二级缓存
Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的
缓存将被 clear 。
MyBatis 的缓存采用了 delegate 机制 及 装饰器模式设计, 当 put 、get 、
remove 时,其中会经过多层 delegate cache 处理,其 Cache类别有:
BaseCache( 基础缓存 ) 、EvictionCache ( 排除算法缓存 ) 、
DecoratorCache ( 装饰器缓存 ) :
BaseCache :为缓存数据最终存储的处理类,默认为 PerpetualCache ,
基于 Map存储;可自定义存储处理,如基于 EhCache、Memcached等;
EvictionCache :当缓存数量达到一定大小后, 将通过算法对缓存数据进
行清除。默认采用 Lru 算法 (LruCache) ,提供有 fifo 算法 (FifoCache)
等;
DecoratorCache :缓存 put/get 处理前后的装饰器, 如使用 LoggingCache
输出缓存命中日志信息、使用 SerializedCache 对 Cache 的数据 put
或 get 进行序列化及反序列化处理、 当设置 flushInterval( 默认 1/h) 后,
则使用 ScheduledCache 对缓存数据进行定时刷新等。
一般缓存框架的数据结构基本上都是 Key-Value 方式存储, MyBatis 对
于其 Key 的生成采取规则为: [hashcode : checksum : mappedStementId :
offset : limit : executeSql : queryParams] 。
对于并发 Read/Write 时缓存数据的同步问题, MyBatis 默认基于
JDK/concurrent 中的 ReadWriteLock ,使用 ReentrantReadWriteLock 的
实现,从而通过 Lock 机制防止在并发 Write Cache 过程中线程安全问
题。
源码剖解
接下来将结合 MyBatis 序列图进行源码分析。在分析其 Cache前,先看看其整
个处理过程。
执行过程 :
① 通常情况下, 我们需要在 Service 层调用 Mapper Interface 中的方法实现
对数据库的操作,上述根据产品
您可能关注的文档
最近下载
- 付费式热能计量与控制系统毕业设计 关键词:预付费;热能计量;远程抄表.doc VIP
- 初中英语:八年级英语上册期末押题作文范文.docx VIP
- 2025届江苏省江阴市利港中学九上化学期末检测试题含解析.doc VIP
- 标准图集 - 12J304楼地面建筑构造图集---.pdf VIP
- 实验室安全知识培训-完整版.pptx VIP
- 2025《基于单片机的温湿度及空气质量检测控制系统设计》7400字(论文).docx VIP
- 90S503_格栅、格网及起吊架.pdf VIP
- 通信线路施工组织方案.docx VIP
- 常压下用正交试验探究镍磷铁最佳浸出镍条件.doc VIP
- 2024-2025学年江西省九江市八年级上册期末数学试卷含答案.pdf VIP
原创力文档

文档评论(0)