Categories
程式開發

緩存是萬惡之源


緩存在降低延遲和負載方面非常有效,但它也引入了一些正確性相關的問題,本文介紹瞭如何避免常見緩存問題的方法。

緩存是萬惡之源 1

插圖來自Jeremy Nguyen/藝術指導Sarah Kislak

緩存的實踐在降低延遲和負載方面是有效的,但它引入了一些糟糕的正確性相關問題。這幾乎是一個自然規律,一旦你引入了反規範化,它會偏離真理的源頭就是遲早的事了。緩存的瞬態性使得問題很難調試,並且使問題變得更加神秘。這就是說,如果你可以在沒有緩存的情況下承受性能和負載,那麼出於對世界上所有美好事物的熱愛,就不要添加它了。不過,在某些情況下,你的客戶無法忍受較長的延遲,並且你的記錄系統也無法承受相應的負載,那你就要不得不與緩存“惡魔”(你認為memcached中的“ d”代表什麼意思)達成協議了。

緩存是萬惡之源 2

在Box,我們與“惡魔”發生過衝突,為了馴服它,我們依賴了許多業界眾所周知的策略以及一些技巧,我們很樂意為社區工具帶貢獻一些力量。由於緩存最常用於優化重讀環境中的延遲和負載,因此在本文中,我們將避免直寫緩存的變化,而將重點放在讀取時填充緩存上。

緩存是萬惡之源 3

在較高的層次上,如果需要的話,讀操作在從記錄系統中讀取值之前,會先在緩存中查找該值。

緩存在未命中時進行填充。寫操作負責使陳舊緩存值失效。

原文鏈接:【https://www.infoq.cn/article/qBBeNUpRK7DqD3cXaIeR】。未經作者許可,禁止轉載。