Redis先操作數據庫和先刪除緩存, 一致性分析


Redis先操作數據庫和先刪除緩存, 一致性分析

文章插圖
初始狀態: 數據庫和緩存中v=10
第一種,先刪除緩存在操作數據庫:
線程1準備更新數據庫的值v=20,先刪除緩存, 此時線程2進來, 緩存未命中,查詢數據庫v=10, 寫入緩存v=10, cpu回到線程1繼續更新數據庫操作,v=20, 導致數據庫和緩存不一致.
第二種,先操作數據庫在刪除緩存:
線程1插敘緩存未命中,查詢數據庫v=10,準備寫入緩存,此時線程2進來,更新數據庫v=20,刪除緩存,cpu回到線程1,寫入緩存v=10,導致數據庫和緩存不一致
分析: 兩種情況都有導致緩存不一致的可能, 但是第二種的可能性非常低,因為:
1, 第二種不一致的前提是某種原因導致緩存已經失效,使線程1進來時未命中
2,寫入緩存的效率要遠比更新數據庫的效率要高, 第二種情況,在線程1查完數據庫到寫入完緩存的時間非常短,不容易有線程插進來.
【Redis先操作數據庫和先刪除緩存, 一致性分析】而第一種,由于更新數據庫的時間相對較長, 更容易被其他線程搶占
結論: 先操作數據庫,再刪除緩存.
(圖源黑馬點評)

    推薦閱讀