本文方案適用於高並發環境,普通環境可采用更簡潔的方案。
一、緩存更新
采用先更新數據庫,再刪除緩存的策略。步驟如下:
1)收到寫請求首先更新數據庫,並確定更新成功
2)刪除Redis緩存,如果刪除成功,流程結束。
3)如果Redis緩存沒有刪除成功,則將相關key放入消息隊列,消費者進行重試操作,直到刪除成功。
二、緩存讀取
1)收到讀請求,首先讀取Redis,判斷緩存是否存在,如果存在,流程結束。
2)如果Redis中,相關key的緩存不存在,則判斷全局環境是否存在相同key的讀請求。
3)如果不存在相同讀請求,則查詢mysql,並將相關value更新到緩存。
4)如果已存在相同讀請求,則沉默一定時間,重新讀取,直到讀取成功。可以設置讀取的重試次數,前提是確保99%的概率能讀取成功。設置重試次數,也是為了保證不發生讀取死循環。