Mybatis进阶之揭开二级缓存的神秘面纱(五)

一、前言:

​ 初学java认识那么多数据结构,一到框架,初闻二级缓存,不经瑟瑟发抖,心想框架都如此神秘吗?二级缓存到底是啥?学完本章,一切真相都将浮出水面.

二、回顾CachingExecutor缓存执行器

​ 前面《Mybatis之Executor执行器(一)》中讲述了CachingExecutor缓存执行器,为什么说它是缓存执行器往下瞧.

avatar

​ 由图可看出,CachingExecutor缓存执行器主要是对事务缓存管理器的控制,它并不进行真正的数据存储.

三、TransactionalCacheManager

​ 事物管理器,主要对事物缓存集进行控制,下图可见.
avatar

四、TransactionalCache

​ 事物管理器,主要对事物缓存集进行控制,下图可见.

avatar

avatar

avatar

五、Cache

​ 缓存器,这个就是我们所说的二级缓存,它是一个应用级别的缓存,不懂的看着要懵逼了,这么多Cache缓存器,具体实现哪个啊?小伙伴们不必感到惊慌噢!这是一个缓存器的责任链+适配器,咱们接着往下瞧.

责任链模式:处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果某个节点处理完了就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕.
摘自:【设计模式】之责任链模式

适配器模式:两个不兼容的接口或对象之间的桥梁,对其进行适配.

avatar

  • BlockingCache - 防穿透缓冲器

    防穿透缓冲器,主要通过重入锁进行线程控制.

    avatar

    avatar

  • SynchronizedCache - 同步缓冲器

    avatar

  • LoggingCache - 缓存命中记录器

    avatar

  • LruCache - 最近最少使用淘汰缓存器

    avatar

  • SerializedCache - 序列化缓存器

    序列化缓冲器,在多个线程获取时为其生成各自的数据副本.

    avatar

  • WeakCache - 弱引用缓存器

    弱引用缓存器,确保有效数据的真实性,此处的垃圾收集队列只做了占位的作用.

    image-20201028000734810.png

  • PerpetualCache - 内存永久缓存器

    image-20201028001802605.png

    这就是神秘的二级缓存啦!看到这里是不是很幸福,嘴角疯狂上扬~,内心感叹 ‘就这?’,没错,就这噢!

六、总结

​ 二级缓存由为主要的是这条执行链,可以对其进行改造并添加新的链节点,Mybatis使用其暂存区也是特别奇妙的地方,必须提交后才对二级缓存进行填充,就是为了回滚后,二级缓存能有效避免脏数据的产生,二级缓存的面纱揭开啦!

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信