本學期我已經學習了一個數據庫類,並且正在研究如何維護RDBMS和緩存服務器(如memcached)之間的緩存一致性。存在競爭條件時會出現一致性問題。例如:使用memcached和像MySQL這樣的rdbms時的緩存一致性
- 假設我從緩存中做一個
get(key)
,並有高速緩存未命中。因爲我得到一個緩存未命中,我從數據庫中獲取數據,然後在緩存中執行一個put(key,value)
。 - 但是,競爭條件可能會發生,其中一些其他用戶可能會刪除從數據庫中提取的數據。在我將
put
放入緩存之前,可能會發生此刪除操作。
因此,理想情況下put
進入緩存不應該發生,因爲數據在數據庫中較長。
如果高速緩存條目具有TTL,則高速緩存中的條目可能會過期。但仍有一個窗口,其中緩存中的數據與數據庫不一致。
我一直在尋找關於這類問題的文章/研究論文。但是,我找不到任何有用的資源。
請解釋如何解決問題中提到的競爭條件。你的回答顯然不能解決問題。 – Alexey