精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Cache2k:Guava Cache及Caffeine之外的新選擇

開發(fā) 前端
JCache規(guī)范不支持null,所以Cache2k默認(rèn)也不支持,不過可以通過PermitNullValues(true)來開啟,這樣子緩存就可以存儲null值。

本文主要研究一下cache2k這款新型緩存。

示例

Cache<String,String> cache = new Cache2kBuilder<String, String>() {}
                .eternal(true)
                .expireAfterWrite(5, TimeUnit.MINUTES)    // expire/refresh after 5 minutes
                .setupWith(UniversalResiliencePolicy::enable, b -> b // enable resilience policy
                                .resilienceDuration(30, TimeUnit.SECONDS)          // cope with at most 30 seconds
                        // outage before propagating
                        // exceptions
                )
                .refreshAhead(true)                       // keep fresh when expiring
                .loader(k -> expensiveOperation(k))         // auto populating function
                .build();

常見問題的解決方案

空值問題

JCache規(guī)范不支持null,所以cache2k默認(rèn)也不支持,不過可以通過permitNullValues(true)來開啟,這樣子緩存就可以存儲null值。

cache stampede問題

又稱作cache miss storm,指的是高并發(fā)場景緩存同時失效導(dǎo)致大面積回源,cache2k采用的是block的請求方式,避免對同一個key并發(fā)回源。

org/cache2k/core/HeapCache.java。

protected Entry<K, V> getEntryInternal(K key, int hc, int val) {
    if (loader == null) {
      return peekEntryInternal(key, hc, val);
    }
    Entry<K, V> e;
    for (;;) {
      e = lookupOrNewEntry(key, hc, val);
      if (e.hasFreshData(clock)) {
        return e;
      }
      synchronized (e) {
        e.waitForProcessing();
        if (e.hasFreshData(clock)) {
          return e;
        }
        if (e.isGone()) {
          metrics.heapHitButNoRead();
          metrics.goneSpin();
          continue;
        }
        e.startProcessing(Entry.ProcessingState.LOAD, null);
        break;
      }
    }
    boolean finished = false;
    try {
      load(e);
      finished = true;
    } finally {
      e.ensureAbort(finished);
    }
    if (e.getValueOrException() == null && isRejectNullValues()) {
      return null;
    }
    return e;
  }

同步回源造成的接口穩(wěn)定性問題

cache2k提供了refreshAhead參數(shù),在新數(shù)據(jù)沒有拉取成功之前,過期數(shù)據(jù)仍然可以訪問,避免請求到來時發(fā)現(xiàn)數(shù)據(jù)過期觸發(fā)同步回源造成接口延時增大問題。不過具體底層還依賴prefetchExecutor,如果refresh的時候沒有足夠的線程可以使用則會立馬過期,等待下次get出發(fā)同步回源。

org/cache2k/core/HeapCache.java。

public void timerEventRefresh(Entry<K, V> e, Object task) {
    metrics.timerEvent();
    synchronized (e) {
      if (e.getTask() != task) { return; }
      try {
        refreshExecutor.execute(createFireAndForgetAction(e, Operations.SINGLETON.refresh));
      } catch (RejectedExecutionException ex) {
        metrics.refreshRejected();
        expireOrScheduleFinalExpireEvent(e);
      }
    }
  }

默認(rèn)的executor如下,采用的是SynchronousQueue隊(duì)列,可以通過builder自己去設(shè)置refreshExecutor

Executor provideDefaultLoaderExecutor(int threadCount) {
    int corePoolThreadSize = 0;
    return new ThreadPoolExecutor(corePoolThreadSize, threadCount,
      21, TimeUnit.SECONDS,
      new SynchronousQueue<>(),
      threadFactoryProvider.newThreadFactory(getThreadNamePrefix()),
      new ThreadPoolExecutor.AbortPolicy());
  }

回源故障問題

針對回源的下游出現(xiàn)故障的問題,cache2k提供了ResiliencePolicy策略,其實(shí)現(xiàn)類為UniversalResiliencePolicy
當(dāng)load方法拋出異常且cache里頭還有數(shù)據(jù)的時候,異常不會拋給client,用當(dāng)前的數(shù)據(jù)返回,這里有個resilienceDuration時間,如果超過這個時間load方法還繼續(xù)拋出異常則異常會拋給client。如果沒有單獨(dú)設(shè)置resilienceDuration,則默認(rèn)取的是expiryAfterWrite時間。

org/cache2k/core/HeapCache.java。

private Object loadGotException(Entry<K, V> e, long t0, long t, Throwable wrappedException) {
    ExceptionWrapper<K, V> exceptionWrapper =
      new ExceptionWrapper(keyObjFromEntry(e), wrappedException, t0, e, exceptionPropagator);
    long expiry = 0;
    long refreshTime = 0;
    boolean suppressException = false;
    RefreshAheadPolicy.Context<Object> refreshCtx;
    try {
      if (e.isValidOrExpiredAndNoException()) {
        expiry = timing.suppressExceptionUntil(e, exceptionWrapper);
      }
      if (expiry > t0) {
        suppressException = true;
      } else {
        expiry = timing.cacheExceptionUntil(e, exceptionWrapper);
      }
      refreshCtx = getContext(e, t0, t, true, true, false, expiry);
      refreshTime = timing.calculateRefreshTime(refreshCtx);
    } catch (Exception ex) {
      return resiliencePolicyException(e, t0, t, new ResiliencePolicyException(ex), null);
    }
    exceptionWrapper = new ExceptionWrapper<>(exceptionWrapper, Math.abs(expiry));
    Object wrappedValue = exceptionWrapper;
    if (expiry != 0) {
      wrappedValue = timing.wrapLoadValueForRefresh(refreshCtx, e, exceptionWrapper);
    }
    Object loadResult;
    synchronized (e) {
      insertUpdateStats(e, (V) wrappedValue, t0, t, true, expiry, suppressException);
      if (suppressException) {
        e.setSuppressedLoadExceptionInformation(exceptionWrapper);
        loadResult = e.getValueOrException();
      } else {
        if (isRecordModificationTime()) {
          e.setModificationTime(t0);
        }
        e.setValueOrWrapper(exceptionWrapper);
        loadResult = exceptionWrapper;
      }
      finishLoadOrEviction(e, expiry, refreshTime);
    }
    return loadResult;
  }

這里timing.suppressExceptionUntil是委托給了ResiliencePolicy#suppressExceptionUntil。

cache2k-addon/src/main/java/org/cache2k/addon/UniversalResiliencePolicy.java。

public long suppressExceptionUntil(K key,
                                     LoadExceptionInfo<K, V> loadExceptionInfo,
                                     CacheEntry<K, V> cachedEntry) {
    if (resilienceDuration == 0 || resilienceDuration == Long.MAX_VALUE) {
      return resilienceDuration;
    }
    long maxSuppressUntil = loadExceptionInfo.getSinceTime() + resilienceDuration;
    long deltaMs = calculateRetryDelta(loadExceptionInfo);
    return Math.min(loadExceptionInfo.getLoadTime() + deltaMs, maxSuppressUntil);
  }

UniversalResiliencePolicy還提供了異常重試的功能,重試間隔為retryInterval,如果沒有配置則為resilienceDuration的5%,采取的是指數(shù)退避的模式,factor為1.5。

小結(jié)

cache2k提供了Guava Cache及Caffeine沒有的ResiliencePolicy,針對C端高并發(fā)場景提供了容錯的功能,值得借鑒一下。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2024-08-29 08:28:17

2022-09-21 08:16:18

緩存框架

2024-01-04 08:33:11

異步JDK數(shù)據(jù)結(jié)構(gòu)

2025-10-29 01:22:00

2009-06-15 17:44:38

JBoss Cache

2009-06-17 16:08:58

Hibernate C

2009-09-22 10:50:04

Hibernate c

2009-06-29 09:00:42

Hibernate的Q

2010-06-02 14:57:38

MySQL cache

2009-07-08 17:04:25

user cache

2019-12-10 09:53:27

LinuxCacheBuffer

2009-09-21 17:09:38

Hibernate C

2012-11-12 10:30:25

IBMdw

2021-08-06 07:51:47

Redis 緩存系統(tǒng)

2011-03-04 15:50:00

FileZilla

2022-12-12 08:39:09

CPUCache偽共享

2025-03-26 03:25:00

SpringGuavaCaffeine

2025-05-16 08:53:06

2009-04-13 11:40:54

IBMdWDB2

2012-05-27 18:09:33

NAG Cache華為
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产日韩视频| 97se亚洲| 丰满亚洲少妇av| 77777亚洲午夜久久多人| 精品少妇一区二区三区免费观| 七七成人影院| 99精品国产视频| 久久av中文字幕| 免费无码一区二区三区| 97人人做人人爽香蕉精品| 一区二区三区在线播放| 欧美精品一区二区三区在线看午夜 | 亚欧洲精品在线视频| 亚洲伊人春色| 日韩三级免费观看| 国产午夜精品视频一区二区三区| 国产xxxxxx| 日韩影院免费视频| 久久免费视频这里只有精品| 国产成人免费观看网站| 国产福利一区二区精品秒拍| 欧美日韩免费观看一区三区| 国产精品333| av在线播放观看| 国产精品三级视频| 久久综合给合久久狠狠色| 国产精品无码在线播放| 玖玖精品视频| 2019亚洲男人天堂| 久草网视频在线观看| 成人三级视频| 欧美一区二区三区男人的天堂| 妞干网这里只有精品| 韩国中文字幕2020精品| 99r精品视频| 产国精品偷在线| 又骚又黄的视频| 午夜在线一区二区| 77777少妇光屁股久久一区| 欧美日韩一级大片| 911久久香蕉国产线看观看| 一区二区三区国产在线观看| 你懂得在线视频| 国产精品巨作av| 欧美岛国在线观看| 亚洲综合123| 国产精品igao视频网网址不卡日韩| 亚洲美女屁股眼交| 久久久久久欧美精品色一二三四| 一级黄色在线观看| 先锋亚洲精品| 日本乱人伦a精品| 精品人妻一区二区三区潮喷在线| 亚洲国产成人精品女人| 自拍偷拍亚洲区| 国产黄色片在线| 美国十次av导航亚洲入口| 精品国产乱码久久久久久牛牛| 亚洲天堂网一区| 日本.亚洲电影| 精品视频免费在线| 999久久久精品视频| 国产日韩在线观看视频| 欧美一级二级三级乱码| 苍井空张开腿实干12次| 久久国产精品免费精品3p| 亚洲精品久久久久久久久| 中文字幕成人免费视频| 精品国产不卡一区二区| 精品国精品自拍自在线| 日本一级片在线播放| 免费看av成人| 国产亚洲欧美另类中文| 亚洲综合自拍网| 欧美成人精品午夜一区二区| 日韩视频免费观看高清在线视频| 色综合手机在线| 欧美黄色成人| 日韩欧美aaaaaa| 精品人妻一区二区三区视频| 亚洲一区二区三区中文字幕在线观看| 在线这里只有精品| 91精品视频国产| 精品无人区一区二区| 亚洲午夜久久久影院| 午夜激情福利电影| 精品91在线| 国产精品第3页| 国产欧美综合视频| 91在线一区二区| 亚洲视频欧美在线| 成年人视频免费在线播放| 在线中文字幕一区二区| 在线观看你懂的视频| 亚洲另类春色校园小说| 亚洲国产成人爱av在线播放| 亚洲日本精品视频| 欧美日韩国产探花| 国产精品久久久久av免费| www三级免费| 国产精品久久久久久久久晋中 | 欧美性受xxxx黑人| 欧美韩日精品| 国产精品高潮视频| 少妇喷水在线观看| 99久久99久久精品免费观看| 午夜午夜精品一区二区三区文| h网站视频在线观看| 亚洲一线二线三线视频| 成人午夜视频在线观看免费| 免费高清视频在线一区| 精品欧美一区二区在线观看 | 国产精品.www| 蜜臀va亚洲va欧美va天堂 | 成人晚上爱看视频| 水蜜桃一区二区| freexxx性亚洲精品| 欧美精品一卡两卡| 在线观看国产精品一区| 日韩欧美视频专区| 96精品视频在线| 亚洲AV午夜精品| 亚洲欧美影音先锋| 一区二区三区免费播放| 制服丝袜日韩| 午夜剧场成人观在线视频免费观看| 日韩精品一区二区三| 久久这里只有| 国产一区二区免费在线观看| 人成在线免费视频| 国产精品视频一区二区三区不卡| 亚洲一区三区视频在线观看 | 亚洲国产欧美国产第一区| 国产一区二区动漫| 性无码专区无码| 乱一区二区av| 日韩国产欧美精品| 丝袜美腿一区| 亚洲午夜精品久久久久久久久久久久| 4p变态网欧美系列| 亚洲色图100p| 日韩精品免费视频人成| 97人摸人人澡人人人超一碰| 免费a级在线播放| 五月婷婷欧美视频| 精品无码人妻少妇久久久久久| 精品免费一区二区| 日韩免费中文字幕| 国产激情无套内精对白视频| 国产精品狼人久久影院观看方式| 日韩视频在线视频| 精品久久免费| 欧美国产精品va在线观看| 国产一区二区网站| 亚洲欧美怡红院| 婷婷激情5月天| 亚洲国产成人精品女人| 亚洲精品久久嫩草网站秘色| 国产精品69久久久| 国产精品尤物视频| 免费看欧美美女黄的网站| 日本视频一区二区不卡| 亚洲成人看片| 国产亚洲精品美女| 97精品人妻一区二区三区| 成人激情综合网站| 成人午夜视频免费观看| 久久伊人影院| 国外成人在线播放| 欧美老女人性开放| 欧美日韩免费在线视频| 男女羞羞免费视频| 国模一区二区三区白浆| 欧美大香线蕉线伊人久久| 青草在线视频| 日韩精品在线视频美女| 五月婷婷视频在线| 国产女人18水真多18精品一级做| 手机在线视频你懂的| 亚洲视频三区| 国产99久久精品一区二区| av资源网在线观看| 欧美一级片在线| 手机看片久久久| 国产精品拍天天在线| 国产女大学生av| 欧美日韩123| 欧美性做爰毛片| 亚洲搞黄视频| 精品国产乱码久久久久久老虎| 日本一级特级毛片视频| 成人激情校园春色| 在线观看免费视频高清游戏推荐| 日韩mv欧美mv国产网站| www.美女亚洲精品| 人妻精品一区二区三区| 欧美网站一区二区| 久久久久亚洲av无码a片| 国产一区二区三区在线观看精品 | 午夜精品久久久久久久白皮肤 | 亚洲人免费短视频| 九九久久精品一区| 国产特黄在线| 日本韩国视频一区二区| 青青草原免费观看| 国产欧美1区2区3区| www.久久久久久久久久久| 99精品国产在热久久下载| 五码日韩精品一区二区三区视频| 成人免费黄色| 97色在线视频| 日本电影全部在线观看网站视频| 欧美日韩国产片| 天天操天天干视频| 国产色婷婷亚洲99精品小说| 亚洲精品无码久久久久久久| 国产美女诱惑一区二区| 影音先锋成人资源网站| 欧洲杯什么时候开赛| 国产亚洲欧美一区二区三区| 亚洲在线资源| 国产精品高清在线| 国产精品粉嫩| 91高清免费在线观看| 蜜臀av在线| 成人欧美一区二区三区白人| 欧美日韩高清丝袜| 99久久精品情趣| 亚洲少妇一区二区三区| 国内一区二区在线| 日本中文字幕影院| 久久99精品一区二区三区三区| 999久久欧美人妻一区二区| 日韩电影免费网址| 视频一区国产精品| 沈樵精品国产成av片| 久久大香伊蕉在人线观看热2| 992tv国产精品成人影院| 国产91免费观看| 新版的欧美在线视频| 色天天综合狠狠色| 丰满人妻一区二区三区四区53| 欧美午夜激情视频| av大片免费观看| 动漫精品一区二区| 中文字幕精品三级久久久| 日韩欧美999| 欧美精品99久久久| 亚洲影院免费观看| 久久久精品视频免费| 亚洲国产你懂的| 久久久全国免费视频| 亚洲一区二区五区| 国产第一页在线播放| 午夜精品久久一牛影视| 成人午夜淫片100集| 日韩欧美国产视频| 日韩欧美一级大片| 欧美美女网站色| 亚洲成人第一网站| 欧美伊人久久久久久久久影院 | 欧美精品国产一区| 人妻激情另类乱人伦人妻| 精品理论电影在线| 久久精品日韩| 亚洲宅男网av| 亚洲国产精品www| 91精品天堂福利在线观看| 日韩精品一线二线三线| 国产精品网站在线看| 久久综合中文色婷婷| 成人一级毛片| 欧美性受xxxx黑人猛交88| 激情视频一区| 欧美精品一区二区三区免费播放| 在线看片日韩| 青青青国产在线视频| 国内精品免费**视频| 日韩在线不卡一区| 国产成人免费高清| 日本r级电影在线观看| 成人福利视频在线| 亚洲欧美va天堂人熟伦| 亚洲视频一区二区在线观看| 婷婷国产成人精品视频| 一区二区免费在线| 欧美国产日韩在线观看成人| 亚洲国产va精品久久久不卡综合| 国产一级片网址| 91黄色小视频| 亚洲精品国产一区二| 亚洲人成亚洲人成在线观看| 青青国产在线| www.亚洲免费视频| 国产精品一二三产区| 国产精品视频一区二区三区四| 福利精品在线| 国产欧美日本在线| 日韩在线视频精品| 久久久亚洲精品无码| 久久99精品久久久久久久久久久久| 亚洲欧美激情网| 国产91丝袜在线播放九色| 最新中文字幕av| 国产精品你懂的在线欣赏| 日韩av免费网址| 制服丝袜日韩国产| 亚洲黄色精品视频| 色先锋资源久久综合5566| 日韩欧美一中文字暮专区| 91性高湖久久久久久久久_久久99| 日韩精品三级| 无遮挡亚洲一区| 欧美精品麻豆| 艹b视频在线观看| 久久免费午夜影院| 国产午夜视频在线播放| 欧美高清视频不卡网| 国产玉足榨精视频在线观看| 亚州成人av在线| 亚洲一区二区三区在线免费| 中文字幕久久一区| 日本中文一区二区三区| www.超碰97| 午夜欧美视频在线观看| 亚洲av无码乱码国产精品| 欧美成人网在线| 日韩久久一区| 亚洲精品一品区二品区三品区| 欧美视频福利| 99精品999| 成人欧美一区二区三区| 中文字幕在线播出| 精品电影一区二区三区| 直接在线观看的三级网址| 91久久久久久久久久| 我不卡手机影院| 国产成人在线综合| 亚洲欧洲精品成人久久奇米网| 日本视频www| 精品女同一区二区| 第一中文字幕在线| 国产精品免费在线| 亚洲国产网站| 中国极品少妇videossexhd| 亚洲午夜电影网| 蜜桃av中文字幕| 97久久久久久| 电影91久久久| 久久久天堂国产精品| 国产成人精品免费| 婷婷丁香综合网| 777奇米四色成人影色区| 在线三级电影| 国产伦精品一区二区三区照片91| 日韩在线理论| 成人不卡免费视频| 亚洲欧洲综合另类| 午夜免费福利视频| 中文字幕亚洲综合| 日韩欧美精品一区二区三区| 欧美第一黄网| 美腿丝袜在线亚洲一区| 亚洲xxxx3d动漫| 精品国产乱码久久久久久图片| 日本三级在线视频| 亚洲已满18点击进入在线看片 | 永久免费毛片在线播放不卡| 羞羞网站在线看| 国产视频一区二区不卡| 亚洲欧美日韩精品一区二区| 18禁一区二区三区| 精品美女久久久久久免费| 成人免费视频| 亚洲最大福利视频网站| 亚洲精选一区| 国产精品理论在线| 欧美成人综合网站| 中文字幕这里只有精品| 亚洲一区二区三区精品在线观看 | 国产乱视频在线观看| 成人福利在线观看| 99精品国产在热久久下载| 麻豆视频免费在线播放| 日韩精品一区二区三区老鸭窝| 91麻豆免费在线视频| 免费在线成人av| 黑人巨大精品欧美一区| 国产免费观看av| www日韩欧美| 香蕉视频一区| 欧美性猛交xx| 欧日韩精品视频| 黄色av网站在线免费观看| 91精品国自产在线观看| 天堂影院一区二区| 永久免费看黄网站| 亚洲免费高清视频| 99亚洲乱人伦aⅴ精品| 欧美午夜aaaaaa免费视频|