Mybatis缓存模块
Mybatis-缓存模块缓存模块要实现哪些功能Mybatis缓存的实现是基于Map的,从缓存里面读写数据是缓存模块的核心基础功能; 除核心功能之外,有很多额外的附加功能,如:防止缓存击穿,添加缓存清空策略(fifo、lru)、序列化功 能、日志能力、定时清空能力等; 附加功能可以以任意的组合附加到核心基础功能之上;
这个模块因为有很多附加功能,而且这些功能是自由组合的所以Mybatis采用了装饰者模式。装饰者模式不太了解的可以看我之前的文章
https://mp.toutiao.com/profile_v4/graphic/preview?pgc_id=7009090446181990949
注意这里看的都是一级缓存
这里查看几个主要的类: Cache : 对应装饰者的抽象组件 CacheKey: 实体类作为缓存的key PerpetualCache : 具体组件 BlockingCache :具体装饰器
Cache public interface Cache { // 缓存实现类的id String getId(); // 往缓存中添加数据,这里的key是Object,key一般是CacheKey对象 void putObject(Object key, Object value); // 根据指定的key从缓存获取数据 Object getObject(Object key); Object removeObject(Object key); void clear(); int getSize(); default ReadWriteLock getReadWriteLock() { return null; } }
PerpetualCache : 这个类提供了基本的缓存功能 // PerpetualCache implements Cache // 缓存的map private final Map