4.17---實現商鋪和緩存與數據庫雙寫一致以及宕機處理

實現商鋪和緩存與數據庫雙寫一致(以及強雙寫一致策略)

redis點評項目采用的是延時雙刪策略

雙刪:

我們更新完數據庫之后刪除緩存,這樣即使有線程并發進來查詢,會發現緩存中沒有數據,從而會去mysql中查找最新的數據。

延時:

在高并發的情況下,如果一個請求更新了數據庫,另一個請求在數據庫更新完成后但緩存刪除之前讀取了舊數據并存入緩存,可能會導致短暫的數據不一致。

延時的作用:

添加過期時間保證緩存會定期失效,觸發重新從數據庫加載最新數據,從而減少臟數據問題。但是它也只能降低臟數據的風險,不能保證數據的強一致性。

在項目中具體操作是:

根據id查詢店鋪時,如果緩存未命中,則查詢數據庫,將數據庫結果寫入緩存,并設置超時時間

根據id修改店鋪時,先修改數據庫,再刪除緩存

除了延時其他保證數據強一致性的方案:

方案一:

給查詢店鋪,修改店鋪這兩步加分布式鎖

方案二:

可以采用加讀寫鎖(分布式鎖的優化方案)

讀鎖(共享鎖):允許多個線程同時獲取(進行讀操作)

寫鎖(排他鎖):一次只允許一個線程獲取(進行寫操作)

簡而言之就是在多線程同時讀數據庫或者緩存數據時,是可以并發處理的,不會阻塞,還可以提高系統吞吐量(分布式鎖在一個線程讀數據庫時其他線程會被阻塞);但是!當一個寫成修改數據庫數據,這時它獲取了寫鎖,它成功實現修改數據庫信息然后更新緩存。在這個過程中系統會保證其他線程不能獲取讀鎖或寫鎖,不能進行任何操作,從而保證數據庫緩存雙寫一致性。

方案三:

可以采用消息隊列

當目標要修改數據時,由service發布信息到消息對列中,然后緩存的service監聽信息隊列的信息,得到數據庫信息要被修改的信息執行更新緩存操作。(缺點是具有一定延時性)

緩存數據庫其中一個宕機了怎么辦?

對于延時雙刪策略來說:

redis出現宕機

緩存完全不可用

數據請求比較小

直接將請求暫時交給數據庫處理

數據請求比較大

方案一:熔斷和降級:返回靜態默認值或緩存過的最后已知值

方案二:啟用本地緩存(Caffeine)作為二級緩存

方案三:對數據庫請求限流,避免雪崩

緩存部分節點宕機

方案一:如果是Redis集群,利用集群自動切換,故障轉移的能力。

方案二:數據分片和數據冗余:數據分片將數據分布在不同的服務器節點上,數據冗余會在多個節點上存儲數據副本。所以即使某節點宕機還是可以獲得部分數據。

數據庫出現宕機

主庫宕機

方案一:進行主從切換:可以提前設置一個備用庫,當主庫宕機就自動切換為備用庫。

方案二:寫入消息隊列中(Kafka),等數據庫恢復后從隊列中獲取數據。

從庫宕機

負載均衡:將請求分發到其他從庫。

如果采用消息隊列:

redis宕機:因為消息隊列中可能還存在未被消費的訂單消息,所以等訂單信息消費之后,將后續的訂單請求直接由mysql數據庫完成,保證數據的一致性。

Kafka宕機:先將redis中未寫入數據庫的訂單信息寫入數據庫中。消息隊列的本質作用是異步削峰,假如消息隊列宕機,后續新的請求只能直接操作數據庫而不是發送給消息隊列,這樣可能會造成數據庫較大壓力,這里可以做一些熔斷和降級的處理邏輯。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77283.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77283.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77283.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

滑動窗口209. 長度最小的子數組

1.題目 給定一個含有 n 個正整數的數組和一個正整數 target 。 找出該數組中滿足其總和大于等于 target 的長度最小的 子數組 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其長度。如果不存在符合條件的子數組,返回 0 。 示例 1: 輸入&…

osu ai 論文筆記 DQN

e https://theses.liacs.nl/pdf/2019-2020-SteeJvander.pdf Creating an AI for the Rhytm Game osu! 20年的論文 用監督學習訓練移動模型100首歌能達到95準確率 點擊模型用DQN兩千首歌65準確率 V抖用的居然不是強化學習? 5,6星打96準確度還是有的東西的 這是5.…

如何通過工具實現流程自動化

通過自動化工具,企業可以顯著提高工作效率、降低人為錯誤、節省時間和成本。現代企業的運營中,流程管理是確保工作順暢的關鍵,而人工處理繁瑣的流程不僅容易出錯,還會消耗大量的時間和人力資源。通過使用適合的自動化工具&#xf…

mongodb 4.0+多文檔事務的實現原理

1. 副本集事務實現(4.0)? ?非嚴格依賴二階段提交? MongoDB 4.0 在副本集環境中通過 ?全局邏輯時鐘(Logical Clock)? 和 ?快照隔離(Snapshot Isolation)? 實現多文檔事務,事務提交時通過…

《理解 Java 泛型中的通配符:extends 與 super 的使用場景》

大家好呀!👋 今天我們要聊一個讓很多Java初學者頭疼的話題——泛型通配符。別擔心,我會用最通俗易懂的方式,帶你徹底搞懂這個看似復雜的概念。準備好了嗎?Let’s go! 🚀 一、為什么我們需要泛型通配符&…

速盾:高防CDN訪問多了會影響源站嗎?

在當今數字化時代,內容分發網絡(CDN)已經成為保障網站性能和用戶體驗的重要工具。特別是高防CDN,它不僅能夠加速內容傳輸,還能有效抵御各種類型的網絡攻擊,確保業務的連續性和穩定性。然而,一些…

Unity URP Moblie AR示例工程,真機打包出來,沒陰影

效果: unity ar示例演示 現象: 真機打包測試私活沒有陰影 Unity版本:2022.3.4f1c1 分析原因: Prefab :ARFeatheredPlane中也有材質,一個用于環境遮擋,一個用于陰影接受。 按理說有啊。 urp …

win10下github libiec61850庫編譯調試sntp_example

libiec61850 https://github.com/mz-automation/libiec61850 v1.6 簡介 libiec61850 是一個開源(GPLv3)的 IEC 61850 客戶端和服務器庫實現,支持 MMS、GOOSE 和 SV 協議。它使用 C 語言(根據 C99 標準)實現&#xf…

Microsoft SQL Server Management 一鍵刪除數據庫所有外鍵

DECLARE ESQL VARCHAR(1000); DECLARE FCursor CURSOR --定義游標 FOR (SELECT ALTER TABLE O.name DROP CONSTRAINT F.name; AS CommandSQL from SYS.FOREIGN_KEYS F JOIN SYS.ALL_OBJECTS O ON F.PARENT_OBJECT_ID O.OBJECT_ID WHERE O.TYPE U AND F.TYPE …

新型多機器人協作運輸系統,輕松應對復雜路面

受到魚類、鳥類和螞蟻等微小生物體協作操縱的啟發,研究人員開發了多機器人協作運輸系統(Multirobot Cooperative Transportation Systems,MRCTS)運輸單個機器人無法處理的重型超大物體,可用于搜救行動、災難響應、軍事…

Framework Binder架構分解

整個 Binder 架構所涉及的總共有以下 5 個目錄: 1. /framework/base/core/java/(Java) 2. /framework/base/core/jni/ (JNI) 3,/framework/native/libs/binder (Native) 4,/framework/native/cmds/servicemanager/ (Native) 5&#xff0c…

騰訊云對象存儲以及項目業務頭像上傳

騰訊云上傳步驟: service-vod模塊化中 ①、參考文檔,引入依賴 ②、配置文件application.properties ③、創建工具類 初始化bean的時候讀取配置文件 Component public class ConstantPropertiesUtil implements InitializingBean{Value("${t…

LeetCode hot 100—括號生成

題目 數字 n 代表生成括號的對數,請你設計一個函數,用于能夠生成所有可能的并且 有效的 括號組合。 示例 示例 1: 輸入:n 3 輸出:["((()))","(()())","(())()","()(())",&…

SpringBoot企業級開發之【文章分類-新增文章分類】

看一下新增文章的需求: 接口文檔: 開發思路: 先在controller下去創建add方法,方法內導入Service類獲取add的結果;再在Service接口下去創建add的方法;然后在Service實現類下去實現方法的作用,且導…

Minecraft盔甲機制詳解(1.9之后)

Minecraft的盔甲有很多種,但是評判盔甲的好壞,通常玩家會使用一個變量來評判——護甲值 護甲值的機制很簡單,一格護甲值 (半個灰色的衣服圖標)最多能提供4%的防御 護甲值在不開作弊的生存模式理論上限是20點&#xf…

為什么要給單片機植入操作系統

給單片機植入操作系統(通常是實時操作系統,RTOS)主要是為了在資源有限的環境中實現更高效、更可靠的多任務管理和系統調度。以下是主要原因和優勢: 1. 多任務并行處理 背景:單片機通常需要同時處理多個任務&#xff0…

Arduino+ESP826601s模塊連接阿里云并實現溫濕度數據上報

ArduinoESP826601s模塊連接阿里云并實現溫濕度數據上報 一、前言二、準備工作三、程序代碼1. Arduino的程序2. ESP826601的程序3. 上面程序需要注意的地方 四、運行結果五、結束語 一、前言 看完我這三篇文章,相信各位朋友對于阿里云物聯網平臺的使用都有了一定的認…

Java 工廠設計模式詳解:用統一入口打造靈活可擴展的登錄系統----掌握 Spring 源碼的基礎第一步

一、前言 在實際開發中,我們經常面臨以下場景: 系統支持多種登錄方式(用戶名密碼、管理員登錄、OAuth 登錄、短信登錄等) 每種登錄方式的認證邏輯不同 我們希望對外提供一個統一的接口調用,而不暴露具體實現 這個…

Windows Acrobat Pro DC-v2025.001.20435-x64-CN-Portable便攜版

Windows Acrobat Pro 鏈接:https://pan.xunlei.com/s/VOO1nMjQ1Qf53dyISGne0c_9A1?pwdsfgn# Acrobat Pro 2024 專業增強版特色 ● 創建和編輯 PDF 文件:可以將各種類型的文檔轉換為 PDF 格式,并進行編輯和修改。 ● 合并和拆分 PDF&#…

【2025“華中杯”大學生數學建模挑戰賽】C題:就業狀態分析與預測 詳細解題思路

目錄 2025“華中杯”大學生數學建模挑戰賽C題 詳細解題思路一、問題一1.1 問題分析1.2 數學模型 1.3 Python代碼1.4 Matlab代碼 二、問題二2.1 問題分析2.2 數學模型 2.3 Python代碼2.4 Matlab代碼 三、問題三3.1 問題分析 四、問題四4.1 問題分析與數學模型 2025“華中杯”大學…