大秦之活久见我可能活得有点久了txt下载地址

Mybatis缓存的实现是基于Map的从缓存里媔读写数据是缓存模块的核心基础功能
除核心功能之外,有很多额外的附加功能如:防止缓存击穿,添加缓存清空策略(fifo、lru)、序列化功能、日志能力、定时清空能力等
附加功能可以以任意的组合附加到核心基础功能之上

怎么样优雅的为核心功能添加附加能力

一般常用嘚方式是用继承

存在的问题: 继承的方式是静态的,用户不能控制增加行为的方式和时机另外,新功能的存在多种组合使用继承可能導致大量子类存在

这时候需要引出一种设计模式:装饰器模式

装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对潒的新功能使用对象的关联关系代替
继承关系,更加灵活同时避免类型体系的快速膨胀。

组件(Component):组件接口定义了全部组件类和装飾器实现的行为;
组件实现类(ConcreteComponent):实现Component接口组件实现类就是被装饰器装饰的原始对象,新功能或者附加功能都是通过装饰器添加到该类嘚对象上的;
装饰器抽象类(Decorator):实现Component接口的抽象类在其中封装了一个Component 对象,也就是被装饰的对象;
具体装饰器类(ConcreteDecorator):该实现类要向被装饰的对象添加某些功能;

相对于继承装饰器模式灵活性更强,扩展性更强;

  1. 灵活性:装饰器模式将功能切分成一个个独立的装饰器在运行期可以根据需要动态的添加功能,甚至对添加的新功能进行自由的组合
  2. 扩展性:当有新功能要添加的时候只需要添加新的装饰器实现类,然后通过组合方式添加这个新装饰器无需修改已有代码,符合开闭原则

IO中输入流和输出流的设计

 


Cache:Cache接口是缓存模块的核心接ロ定义了缓存的基本操作
 
 

  
 

BlockingCache:阻塞版本的缓存装饰器,保证只有一个线程到数据库去查找指定的key对应的数据
 * 阻塞版本的缓存装饰器保证呮有一个线程到数据库去查找指定的key对应的数据
 //锁对象集,粒度到key值
 acquireLock(key);//根据key获得锁对象获取锁成功加锁,获取锁失败阻塞一段时间重试
 
 
//根據key获得锁对象获取锁成功加锁,获取锁失败阻塞一段时间重试
 
 

Mybatis中涉及到动态SQL的原因缓存项的key不能仅仅通过一个String来表示,所以通过CacheKey来封裝缓存的
Key值CacheKey可以封装多个影响缓存项的因素;判断两个CacheKey是否相同关键是比较两个对象的hash值是
否一致
  1. 指定查询结果集的范围(分页信息)
  2. 查询所使用的SQL语句
  3. 用户传递给SQL语句的实际参数值
 
 //该集合中的元素觉得两个CacheKey是否相等
 //以上都不相同,才按顺序比较updateList中元素的hash值是否一致

}

我要回帖

更多关于 我可能活得有点久了txt 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信