小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

華為架構(gòu)師與你一起探索高并發(fā)緩存架構(gòu)(有示例代碼)

 昵稱11935121 2018-02-07

華為架構(gòu)師與你一起探索高并發(fā)緩存架構(gòu)(有示例代碼)

對于高并發(fā)的系統(tǒng),所有的請求都打在數(shù)據(jù)庫上是不明智的選擇。一般的做法是通過緩存來緩解數(shù)據(jù)庫的壓力。緩存是用于解決高并發(fā)場景下系統(tǒng)的性能及穩(wěn)定性問題的銀彈。最主要的就是要考慮到緩存的穿透性和數(shù)據(jù)一致性問題。

先來看一個示例:

華為架構(gòu)師與你一起探索高并發(fā)緩存架構(gòu)(有示例代碼)

初級程序員代碼

這是一個簡單應(yīng)用緩存的示例,存在以下幾個問題:

1:高并發(fā)的情況下,大部分請求會直接訪問數(shù)據(jù)庫。多線程的情況下,緩存還沒及時寫入,就會有大部分請求直接訪問數(shù)據(jù)庫。

2:業(yè)務(wù)邏輯與緩存之間解耦性太高。

先來解決第一個問題。就是利用鎖的機制。但是要考慮加鎖的地方,加的不對會導(dǎo)致性能問題,比如不能加到整個方法上。

華為架構(gòu)師與你一起探索高并發(fā)緩存架構(gòu)(有示例代碼)

中級程序員代碼

接下來解決第二個問題,這就是解耦問題,讓別的人也可以輕松使用這個緩存方法。那就是使用模板設(shè)計模式,做一個緩存模板。

華為架構(gòu)師與你一起探索高并發(fā)緩存架構(gòu)(有示例代碼)

高級程序員代碼

調(diào)用方式:

華為架構(gòu)師與你一起探索高并發(fā)緩存架構(gòu)(有示例代碼)

高級程序員代碼

目前為止,是一個相對比較完美的方案了。

但是作為架構(gòu)師,眼界還需要再開闊一下,那就是需要實現(xiàn)一個更加方便的架構(gòu)供更多的人靈活調(diào)用。給大家提示一下,借鑒Spring cache的思想使用AOP + Annotation等技術(shù)實現(xiàn)緩存與業(yè)務(wù)邏輯的解耦。

大概的流程如下:

1 . 獲取到攔截方法的 @Cache 注解,并生成緩存 key;

2 . 通過緩存 key,去緩存中獲取數(shù)據(jù);

3 . 如果緩存命中,執(zhí)行如下流程:

  • 如果需要自動加載,則把相關(guān)信息保存到自動加載隊列中;

  • 否則判斷緩存是否即將過期,如果即將過期,則會發(fā)起異步刷新;

  • 最后把數(shù)據(jù)返回給用戶。

4 . 如果緩存沒有命中,執(zhí)行如下流程:

  • 選舉出一個 leader 回到數(shù)據(jù)源中去加載數(shù)據(jù),加載到數(shù)據(jù)后通知其它請求從內(nèi)存中獲取數(shù)據(jù)(拿來主義機制);

  • leader 負責(zé)把數(shù)據(jù)寫入緩存;如果需要自動加載,則把相關(guān)信息保存到自動加載隊列中;

  • 最后把數(shù)據(jù)返回給用戶。

華為架構(gòu)師與你一起探索高并發(fā)緩存架構(gòu)(有示例代碼)

架構(gòu)師級別的設(shè)計

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多