diff --git a/README.md b/README.md
index 59713f0..077d221 100644
--- a/README.md
+++ b/README.md
@@ -61,3 +61,12 @@
### 编码规范
### 设计模式
+
+## 贡献者
+感谢以下所有朋友对 [GitHub 技术社区 Doocs](https://github.com/doocs) 所做出的贡献,[参与项目维护请戳这儿](https://doocs.github.io/#/?id=how-to-join)。
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/Mybatis/基础支持层/4、缓存模块.md b/docs/Mybatis/基础支持层/4、缓存模块.md
index e69de29..12e1e73 100644
--- a/docs/Mybatis/基础支持层/4、缓存模块.md
+++ b/docs/Mybatis/基础支持层/4、缓存模块.md
@@ -0,0 +1,617 @@
+MyBatis中的缓存分为一级缓存、二级缓存,但在本质上是相同的,它们使用的都是Cache接口的实现。MyBatis缓存模块的设计 使用了装饰器模式,这里不对此进行过多解析,以后会专门开一篇博文分析常用框架中使用到的设计模式。
+## 1 Cache组件
+MyBatis中缓存模块相关的代码位于org.apache.ibatis.cache包下,其中Cache接口是缓存模块中最核心的接口,它定义了所有缓存的基本行为。
+```java
+public interface Cache {
+
+ /**
+ * 获取当前缓存的Id
+ */
+ String getId();
+
+ /**
+ * 存入缓存的key和value,key一般为CacheKey对象
+ */
+ void putObject(Object key, Object value);
+
+ /**
+ * 根据key获取缓存值
+ */
+ Object getObject(Object key);
+
+ /**
+ * 删除指定的缓存项
+ */
+ Object removeObject(Object key);
+
+ /**
+ * 清空缓存
+ */
+ void clear();
+
+ /**
+ * 获取缓存的大小
+ */
+ int getSize();
+
+ /**
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!
+ * 获取读写锁,可以看到,这个接口方法提供了默认的实现!!
+ * 这是Java8的新特性!!只是平时开发时很少用到!!!
+ * !!!!!!!!!!!!!!!!!!!!!!!!!!
+ */
+ default ReadWriteLock getReadWriteLock() {
+ return null;
+ }
+}
+```
+如下图所示,Cache接口的实现类有很多,但大部分都是装饰器,只有PerpetualCache提供了Cache 接口的基本实现。
+
+
+### 1.1 PerpetualCache
+PerpetualCache(Perpetual:永恒的,持续的)在缓存模块中扮演着被装饰的角色,其实现比较简单,底层使用HashMap记录缓存项,也是通过该HashMap对象的方法实现的Cache接口中定义的相应方法。
+```java
+public class PerpetualCache implements Cache {
+
+ // Cache对象的唯一标识
+ private final String id;
+
+ // 其所有的缓存功能实现,都是基于JDK的HashMap提供的方法
+ private Map