cache同步機制之讀寫
1.概念解析
cache :這裡的cache可以指L1,L2,L3這種CPU緩存,也可以是記憶體,也可以是磁盤緩存,差別在于處于什麼場景下。
記憶體 :對于cache的後端存儲,總之是在cache之後。或是持久或是非持久的存儲。
cache hit :當從cache中讀取資料時,恰好命中,讀到資料,又稱緩存命中
cache miss: 對應cache hit ,在緩存中沒有讀到資料,需要到後端存儲讀取。
對應還有write miss , write hit , read miss ,read hit.
2.寫同步
現在的CPU是由L1,L2,L3,記憶體,實體存儲五級存儲方式,通路速度是越來越慢,那麼對于資料傳遞過程該如何定義呢?
2.1) write through cache :
每次重新整理cache時,同時同步的将資料重新整理到記憶體中。優點:簡單,缺點:相比較來說慢一些。
2.2) write back cache
重新整理資料到cache中,但是不立刻同步資料到記憶體,但标志這些資料在記憶體中是髒資料,等到這些資料要會清理出緩存的時候(例如LRU算法),再将資料重新整理到記憶體中,因為很多場景下有些資料隻是一些中間資料,并不是最終資料。優點:CPU效率高,但是實作複雜。還需要承擔在cache中資料未重新整理到記憶體中的風險。
以上兩種方式是在走兩個極端,一個極端是有資料就立刻同步,另一個極端就是等有需要删除資料時就同步資料(這個也是memcached服務端的實作政策)。那麼有沒有一種介于這兩者之間的傳遞資料方式呢?那就是post write 。
2.3) post write
cpu更新緩存時,把更新的資料寫入到一個更新緩存器中,在合适的時候更新資料到記憶體中,這個時機需要根據具體的業務場景來分析,可以是定時,也可以是某種觸發機制下,例如更新緩存器中資料達到多少的比例。簡單的話就是異步的方式同步資料。這種方式也面臨的問題就是寫資料在緩存中丢失的問題都需要去考慮容災。
3.讀同步
在第一個節點已經介紹可cache hit && cache miss .那麼在cache miss的情況下如何處理呢?有兩種:
讀取資料有兩種,一種是從後端存儲中讀到資料後直接放到CPU,這種稱之為:read through,另一種就是讀取資料後,先放到cache中,再從cache中讀取資料。
cache hit && cache miss 的資料寫入
我們在cache中讀到資料,需要重寫回去,那麼就上面提到的三種寫政策
但是是針對寫入過程中原來資料已經不存在了的情況有以下兩種處理方式:
1.Write allocate:将寫入資料從記憶體中讀入緩存,然後采用write-hit(緩存命中寫入)操作。寫缺失操作與讀缺失操作類似。
2.No-write allocate:方式并不将寫入位置讀入緩存,而是直接将資料寫入存儲。這種方式下,隻有讀操作會被緩存,因為不會有新資料寫入緩存,都直接寫記憶體了。
同步以上的分析,我們大緻知道了CPU是如何處理L1和記憶體之間的資料同步的,那麼我們在自己做緩存設計的時候也可以參考。
以上内容是自己摘取分析的成果,若有問題,歡迎指出!