不一致問題:
缺點:如果在修改資料庫之後更新快取之前出現問題,出現資料不一致
解決方案:先刪除快取,再修改資料庫
缺點:如果在刪除快取之後修改資料庫之前,出現另乙個執行緒去讀快取發現快取為空,又從資料庫拉取還沒被修改的舊資料到快取,導致資料不一致(注:只有在對乙個資料在併發的進行讀寫的時候,才可能會出現這種問題。其實如果說你的併發量很低的話,特別是讀併發很低,每天訪問量就 1 萬次,那麼很少的情況下,會出現剛才描述的那種不一致的場景)
解決方案:在修改資料的時候,在jvm內部佇列中放入這條資料的唯一標識,當另乙個請求過來發現快取中資料為空時先不去資料庫拉取資料,而是把這個請求也放到內部佇列中,等前面的修改操作執行完再去拉取資料(注:乙個佇列中,其實多個更新快取請求串在一起是沒意義的,因此可以做過濾,如果發現佇列中已經有乙個更新快取的請求了,那麼就不用再放個更新請求操作進去了,直接等待前面的更新操作請求完成即可。)
參考:如何保證快取和資料一致性
如何保證Redis快取和資料庫的雙寫一致性?
在資料庫 快取模式下,當資料庫中的資料需要更新時,快取裡的資料怎麼處理?如何保證快取和資料庫中資料的一致性?常用的解決方案有兩種 其他渣渣的方案這裡不討論 1 先刪除快取,再更新資料庫 2 先更新資料庫,再刪除快取 下面我們就來看一下這兩種方案,看看它們是怎麼保證資料一致性的?理想的流程是這樣的 先...
如何更新快取保證快取和資料庫雙寫一致性?
在專案中快取是經常用到的,為了減少和資料庫的互動,小夥伴們利用快取的思路如下 我們小夥伴們有沒有考慮到快取更新的問題,小夥伴們肯定會說肯定用過啊,有資料更新時,把快取清空掉就行了啊,下一次訪問的時候服務就會把新值設定到快取中了。這樣不就行了嗎?對的,在一般專案中,這樣的使用就夠了。那麼大家看看在高併...
Redis如何保證快取與資料庫的雙寫一致性?
原創 只要用快取,就可能會涉及到快取與資料庫雙儲存雙寫,你只要是雙寫,就一定會有資料一致性的問題 那麼,如何解決一致性問題?一般來說,如果允許快取可以稍微的跟資料庫偶爾有不一致的情況,也就是說如果你的系統不是嚴格要求快取 資料庫必須保持一致性的話,最好不要做這個方案。即 讀請求和寫請求序列化,串到乙...