邊緣緩存模式 Cache-Aside Pattern

按照業(yè)務(wù)需求, 在業(yè)務(wù)層緩存一定的數(shù)據(jù)以提升性能. 同時(shí)還要保持緩存數(shù)據(jù)和底層數(shù)據(jù)的一致性.

解決的問題

業(yè)務(wù)端通過緩存一定的數(shù)據(jù)避免重復(fù)訪問底層, 從而拉升性能. 然而緩存數(shù)據(jù)和底層數(shù)據(jù)可能存在不一致, 業(yè)務(wù)端必須實(shí)現(xiàn)一定的緩存失效策略來盡可能保證一致性.

方案

很多緩存系統(tǒng)提供read-through, write-through/write-behind這樣的基本操作.

  • read-through 就是先讀緩存, 沒找到就去底層拉數(shù)據(jù), 然后更新緩存, 拉升讀效率
  • write-through/write-behind 就是先寫緩存, 如果緩存沒命中, 就直接去底層那數(shù)據(jù). 如果緩存命中的話, 那么業(yè)務(wù)線程就更新緩存內(nèi)的數(shù)據(jù), 后臺(tái)線程把一段時(shí)間內(nèi)積累的更新一次性刷回底層. 拉升寫效率

類似這樣的緩存系統(tǒng)對(duì)業(yè)務(wù)端都是透明的, 有特殊需求的話, 業(yè)務(wù)端很可能就要制定自己的失效策略, 以及決策是否使用寫時(shí)緩存.


read-through

決策問題

  • 緩存的TTL 需要根據(jù)應(yīng)用需求配置合理的TTL, 如果太短造成緩存連續(xù)失效, 那么這樣的緩存就沒有存在的意義. 如果太長有可能影響客戶的使用體驗(yàn). 緩存數(shù)據(jù)的選取也是一個(gè)問題, 傳統(tǒng)上有LRU Clock-Pro等算法來幫助我們選取需要緩存的數(shù)據(jù). 在實(shí)際應(yīng)用中, 靜態(tài)數(shù)據(jù)是必然可以被緩存在客戶端的, 同時(shí)根據(jù)業(yè)務(wù)形態(tài)我們可以緩存周期性變化的數(shù)據(jù),如一個(gè)每日凌晨更新的統(tǒng)計(jì)數(shù)據(jù)表. 類似的更新策略不能太復(fù)雜.

  • 緩存預(yù)分配 是否在應(yīng)用啟動(dòng)前預(yù)分配, 甚至預(yù)先拉取數(shù)據(jù). 如果這么做可以有效的提升啟動(dòng)時(shí)的性能. 在系統(tǒng)復(fù)雜低時(shí)主動(dòng)拉取數(shù)據(jù), 主動(dòng)開辟大緩存空間等. 實(shí)際實(shí)現(xiàn)可能涉及到復(fù)雜的策略, 所以需要小心權(quán)衡

  • 一致性 由于不保證緩存和底層數(shù)據(jù)一致, 所以部分輸出的結(jié)果可能是陳舊的, 業(yè)務(wù)是否能夠接受這樣的結(jié)果?

  • 本地緩存共享 在多進(jìn)程情況下, 本地的多個(gè)進(jìn)程可能都持有同一個(gè)數(shù)據(jù)的緩存. 但緩存內(nèi)的數(shù)據(jù)卻可能不一致, 這一方面帶來了不一致性, 另外一方面也帶來了空間上的浪費(fèi). 在同一臺(tái)物理機(jī)上的進(jìn)程是否應(yīng)該共享緩存. 整個(gè)系統(tǒng)因此變的復(fù)雜和更難維護(hù)是否可以可以接受的?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,305評(píng)論 2 89
  • 從一個(gè)數(shù)據(jù)存儲(chǔ)按需加載數(shù)據(jù)到一個(gè)緩存中。該模式能夠提高性能并且也有助于維護(hù)緩存中的數(shù)據(jù)和底層數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù)之間的...
    zlup閱讀 2,257評(píng)論 0 0
  • 理論總結(jié) 它要解決什么樣的問題? 數(shù)據(jù)的訪問、存取、計(jì)算太慢、太不穩(wěn)定、太消耗資源,同時(shí),這樣的操作存在重復(fù)性。因...
    jiangmo閱讀 3,139評(píng)論 0 11
  • 今天看到一位朋友寫的mysql筆記總結(jié),覺得寫的很詳細(xì)很用心,這里轉(zhuǎn)載一下,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,834評(píng)論 0 30
  • Load data on demand into a cache from a data store. This ...
    jorgensen閱讀 5,312評(píng)論 0 2

友情鏈接更多精彩內(nèi)容