并發(fā)編程中的一致性 在大數據高并發(fā)環(huán)境下應該怎么保證庫存或者下單同步?
在大數據高并發(fā)環(huán)境下應該怎么保證庫存或者下單同步?在互聯網開發(fā)中,如果在大數據、高并發(fā)的環(huán)境下,很多人下單,如何保證庫存的抵扣永遠正確?將庫存加載到緩存中,如rDB讀寫分離情況下,如何解決緩存和數據庫
在大數據高并發(fā)環(huán)境下應該怎么保證庫存或者下單同步?
在互聯網開發(fā)中,如果在大數據、高并發(fā)的環(huán)境下,很多人下單,如何保證庫存的抵扣永遠正確?
將庫存加載到緩存中,如r
DB讀寫分離情況下,如何解決緩存和數據庫不一致性問題?
說明:連續(xù)寫數據庫和緩存,但是在操作過程中,存在并發(fā),數據不一致。
通常,高速緩存和數據庫按以下順序更新:
l先更新數據庫,再更新緩存。
l先刪除緩存,再更新數據庫。
l首先更新數據庫,然后刪除緩存。
看看這三種的優(yōu)缺點:
請在更新緩存之前更新數據庫。
這樣做的問題是,當同時有兩個更新數據的請求時,如果您不 不要使用分布式鎖,你不會 不能控制最后緩存的值是什么。就是并發(fā)寫的時候有問題。
請在更新數據庫之前刪除緩存。
這樣做的問題是,如果客戶端在刪除緩存后讀取數據,它可能會讀取舊數據并將其設置在緩存中,導致緩存中的數據總是舊數據。
有兩種解決方案:
我使用 "雙重刪除 ",即刪除或刪除。刪除的最后一步是異步操作,這是為了防止舊值在客戶端讀取時被設置。
我用隊列。當這個鍵不存在時,將它放入隊列中并順序執(zhí)行。你可以 直到數據庫更新后才能讀取數據。
總的來說比較麻煩。
請在刪除緩存之前更新數據庫。
這實際上是一個常見的方案,但許多人不 我不知道。我在這里介紹一下。It 我們稱之為緩存?zhèn)溆媚J?,是外國人發(fā)明的。如果首先更新數據庫,然后刪除緩存,那么將顯示更新次數。根據數據庫,以前有瞬時數據不是很及時。
同時,如果更新前緩存剛好失效,讀客戶端可能會讀取舊值,然后在寫客戶端刪除后重新設置舊值,這是非常巧合的。
有兩個前提條件:寫之前緩存無效,同時寫客戶端刪除操作之后舊數據放置——也就是讀比寫慢。一些寫操作也會鎖定表。
所以,這很難出現,但如果出現了呢?使用雙重刪除?。?!記錄更新期間客戶端是否讀取數據庫,如果是,則在更新數據庫后執(zhí)行延遲刪除。