• mybatis二级缓存讲解


    一、二级缓存的定义

    二级缓存也称作是应用级缓存,与一级缓存不同的是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有更高的命中率,适合缓存一些修改比较少的数据。

    二、二级缓存的结构

     二级缓存在结构设计上采用装饰器+责任链模式

    二级缓存是如何组装这些装饰器的呢?

    这里我们先介绍一下CacheBuilder类,该类就是二级缓存的构建类里面定义了一些上图装饰器类型的属性,以及构建组合这些装饰器的行为。

    其中组合各个装饰器为责任链的方法主要涉及

    public Cache build() {}

    private Cache setStandardDecorators(Cache cache) {}

    具体源码如下:

     

    1)SynchronizedCache线程同步缓存区

    实现线程同步功能,与序列化缓存区共同保证二级缓存线程安全。若blocking=false关闭则SynchronizedCache位于责任链的最前端,否则就位于BlockingCache后面而BlockingCache位于责任链的最前端,从而保证了整条责任链是线程同步的。

    2)LoggingCache统计命中率

    3)ScheduledCache过期清理缓存区

    4)LruCache(最近最少使用)防溢出缓存区

    5)FifoCache(先进先出)防溢出缓存区

     

    三、二级缓存执行流程

     

     1)若开启二级缓存进行查询方法的时候会走到类CachingExecutor中的query方法

     2)根据上一步中的tcm.getObject(cache, key)方法查询二级缓存

     由于涉及方法调用深度,暂时无法未梳理清除二级缓存执行具体执行流程。

  • 相关阅读:
    BZOJ2594 [Wc2006]水管局长数据加强版 LCT kruskal
    BZOJ1180 [CROATIAN2009]OTOCI LCT
    BZOJ2631 tree LCT
    BZOJ1901 Zju2112 Dynamic Rankings 主席树
    BZOJ1367 [Baltic2004]sequence 堆 左偏树
    BZOJ5120 [2017国家集训队测试]无限之环 费用流
    BZOJ3377 [Usaco2004 Open]The Cow Lineup 奶牛序列 其他
    BZOJ3091 城市旅行 LCT
    BZOJ2843 极地旅行社 LCT
    BZOJ1269 [AHOI2006]文本编辑器editor splay
  • 原文地址:https://www.cnblogs.com/zhaochi/p/13081990.html
Copyright © 2020-2023  润新知