簡體   English   中英

如何使用樂觀並發控制解決直讀式緩存中的沖突?

[英]How to resolve a conflict in a read-through cache using optimistic concurrency control?

我們目前有一個讀取緩存,在緩存未命中時填充緩存時使用樂觀並發控制。 我們預計不會發生很多沖突,因此我們選擇使用樂觀並發控制。 當我們確實遇到沖突時,我有點不確定該怎么做。

如果我們有緩存未命中,我們從數據庫中提取相關行,然后將其放入緩存中以供將來參考。 在我們將它放入緩存之前,我們確保自從我們的初始數據庫讀取以來緩存鍵的值沒有改變。 如果有,我現在傾向於使緩存條目無效,只是為了安全起見,但這似乎有點低效。 有沒有更好的選擇,哪些仍然安全?

為了記錄,我們使用Redis作為緩存層,使用MySQL作為后備存儲。

如果沖突很少,那么為什么不再只是再次WATCH密鑰,再次生成緩存數據,並嘗試再次填充Redis。 只需不斷重復此過程,直到您的EXEC最終恢復清潔為止。 您可以將最大重試次數設置為理智,如果超過該次數,則只會使緩存無效並通知您的管理員。 通知步驟似乎很重要,因為如果你的樂觀鎖失敗超過5次,那么可能會發生一些奇怪的事情,你應該仔細看看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM