Redis的一致性

一、產生的原因

使用緩存,在進行寫操作的時候就會出現不一致的問題。
一致性分為三類:強一致性,弱一致性,最終一致性

二、方案

2.1 延時雙刪

在更新數據庫的操作前后分別進行一次刪除緩存的操作,并在更新數據庫之后線程休眠一段時間。

在這里插入圖片描述

  1. 先刪除緩存
  2. 再更新數據庫
  3. 休眠一會(比如1秒),再次刪除緩存。

這個休眠一會,一般多久呢?都是1秒?
休眠時間 = 讀業務邏輯數據的耗時 + 幾百毫秒。為了確保讀請求結束,寫請求可以刪除讀請求可能帶來的緩存臟數據。

該方法優缺點思考:
這種方案還算可以,只有休眠那一會(比如就那1秒),可能有臟數據,一般業務也會接受的。但是如果第二次刪除緩存失敗呢?
緩存和數據庫的數據還是可能不一致,對吧?
給Key設置一個自然的expire過期時間,讓它自動過期怎樣?
那業務要接受過期時間內,數據的不一致咯?還是有其他更佳方案呢?

2.2 刪除緩存重試機制

當第二次刪除緩存失敗怎么辦?那就再刪一次唄,還不行就再刪一次!
在這里插入圖片描述

  1. 寫請求更新數據庫
  2. 緩存因為某些原因,刪除失敗
  3. 把刪除失敗的key放到消息隊列
  4. 消費消息隊列的消息,獲取要刪除的key
  5. 重試刪除緩存操作

2.3 讀取biglog異步刪除緩存

刪除緩存重試機制雖然能夠解決一致性的問題,但是對代碼的侵入性較大,可以進行如下優化:通過數據庫的binlog來異步淘汰key。
在這里插入圖片描述
以mysql為例,
可以使用阿里的canal將binlog日志采集發送到MQ隊列里面
然后通過ACK機制確認處理這條更新消息,刪除緩存,保證數據緩存一致性

三、可能出現的疑問

3.1 為什么先操作數據庫,再操作緩存?

假設先操作緩存再操作數據庫,可能會出現如下情況:
線程A先刪除緩存,在A更新數據庫的操作結束前,線程B去讀數據,發現緩存沒數據了,那么B就會去數據庫中查詢,結果讀到的就是臟數據并存在緩存中,然后A更新完數據庫,導致數據庫和緩存中的值不一致。
如果先操作數據庫再操作緩存,能保證一致性。

在這里插入圖片描述

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

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

相關文章

《HelloGitHub》第 98 期

興趣是最好的老師,HelloGitHub 讓你對編程感興趣! 簡介 HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。 github.com/521xueweihan/HelloGitHub 這里有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等,涵蓋多種編程語言 Python、…

Docker大學生看了都會系列(三、常用幫助、鏡像、容器命令)

系列文章目錄 第一章 Docker介紹 第二章 2.1 Mac通過Homebrew安裝Docker 第二章 2.2 CentOS安裝Docker 第三章 Docker常用命令 文章目錄 前言環境常用命令幫助命令鏡像命令容器命令 總結 前言 前面2章學完了基礎概念,實操安裝使用。接下來了解一些日常中常用的命令…

Java - 隨機存取文件類

在Java中,隨機存取文件(Random Access File)通常使用java.io.RandomAccessFile類來實現。這個類允許你讀取和寫入文件的任意位置,而不是像FileReader和FileWriter那樣只能從頭開始或追加到文件末尾。 RandomAccessFile類提供了用…

容器化部署fastdfs文件存儲

目錄 一、軟件信息 二、構建fastdfs鏡像 三、docker 啟動fdfs服務 四、k8s部署fdfs服務 1、fdfs部署文件 五、外部服務訪問 一、軟件信息 fastdfs版本:fastdfs:V5.11 libfastcommon版本: V1.0.36 fastdfs-nginx-module版本:V1.20 nginx版本&…

速盾:cdn技術詳解

CDN(Content Delivery Network,內容分發網絡)是一種基于分布式架構的網絡技術,通過將內容緩存到離用戶較近的服務器上,從而提升網站的訪問速度和可靠性。本文將詳細介紹CDN技術的原理和工作流程。 CDN技術的原理是將網…

h5相機功能

h5相機功能 利用vant input file <template><div class"mb10"><divv-for"(item, index) in info.imgList":key"index"class"imgItem f32 mr20"click"preview(item, index)"><img :src"doFileUrl…

<sa8650>QCX Usecase 使用詳解—如何在管道中添加多個 IPE 實例

<sa8650>QCX Usecase 使用詳解—如何在管道中添加多個 IPE 實例 一、前言二、UsecaseSRV添加新格式三、更新usecase.xml四、定義 IPE 的新實例五、添加新鏈接六、QCarcam測試XML一、前言 本節說明在使用Usecase/Pipeline XML 中添加多個 IPE 實例所需的更改。以下示例解釋了…

使用Spring Boot和MybatisPlus的Java CRM客戶關系管理系統源碼

項目名稱&#xff1a;CRM客戶關系管理系統 功能模塊及描述&#xff1a; 一、待辦事項 今日需聯系客戶&#xff1a;顯示當日需跟進的客戶列表&#xff0c;支持查詢和篩選。 分配給我的線索&#xff1a;管理分配給用戶的線索&#xff0c;包括線索列表和查詢功能。 分配給我的客…

導彈研究中常用坐標系及坐標系之間的變換

在導彈飛行控制過程中&#xff0c;需要時刻掌握導彈的飛行狀態 &#xff08;速度、位置、姿態角等&#xff09;&#xff0c;這就有賴于描述導彈飛行狀態的坐標系。除了大地坐標系和地心大地直角坐標系外&#xff0c;導彈常用的坐標系還有很多&#xff0c;合理而恰當地選擇參考系…

golang調用外部程序包os/exec中的 Command和CommandContext 函數創建的Cmd對象的區別

在go語言中&#xff0c;我們可以通過os/exec包中的Command和CommandContext 函數創建對應的外部程序執行Cmd對象&#xff0c; 這2個函數創建的cmd命令執行對象是有區別的&#xff0c;CommandContext創建的對象可以攜帶上下文&#xff0c;這個主要用于我們通過cancel函數給對應的…

37【透視】兩點透視

1 兩點透視比較合適表現物體的結構 用兩點透視繪制比較小的、箱子之類的物體 2 一點透視和兩點透視的共存關系

【Binaryen】partiallyPrecompute函數梳理

在Binaryen中有一個優化名為Precompute&#xff0c;作用是進行一些提前計算&#xff0c;類似于LLVM中的常量折疊類似的操作。 涉及的提交文件在此。 首先放一下全部的代碼&#xff1a; // To partially precompute selects we walk up the stack from them, like this://// …

vs - vs2013/vs2019工程文件的區別

文章目錄 vs - vs2013/vs2019工程文件的區別概述筆記sln文件的區別VisualStudioVersion vcxproj文件的區別ToolsVersionPlatformToolset 備注更方便的方法END vs - vs2013/vs2019工程文件的區別 概述 為了避免安裝UCRT的問題&#xff0c;想將手頭的vs2019工程降級為vs2013工程…

VLM MobileVLM 部署筆記

目錄 模型是自動下載的 在1060顯卡上能跑 LLaMA Meta MobileVLM V2 MobileLLaMA-1.4B 調錯 開源項目地址&#xff1a; GitHub - Meituan-AutoML/MobileVLM: Strong and Open Vision Language Assistant for Mobile Devices 模型是自動下載的 路徑&#xff1a; C:\User…

解決Mac ~/.bash_profile 配置的環境變量重啟終端后失效問題

在Mac系統中&#xff0c;配置環境變量通常是在~/.bash_profile文件中進行。然而&#xff0c;有時會遇到配置的環境變量在重啟終端后失效的問題。 解決辦法&#xff1a; 在~/.zshrc文件最后或最前面&#xff0c;增加一行 source ~/.bash_profile

SARscape雷達圖像處理軟件簡介

合成孔徑雷達&#xff08;SAR&#xff09;擁有獨特的技術魅力和優勢&#xff0c;漸成為國際上的研究熱點之一&#xff0c;其應用領域越來越廣泛。SAR數據可以全天候對研究區域進行量測、分析以及獲取目標信息。高級雷達圖像處理工具SARscape&#xff0c;能讓您輕松將原始SAR數據…

Leetcode 第 131 場雙周賽題解

Leetcode 第 131 場雙周賽題解 Leetcode 第 131 場雙周賽題解題目1&#xff1a;3158. 求出出現兩次數字的 XOR 值思路代碼復雜度分析 題目2&#xff1a;3159. 查詢數組中元素的出現位置思路代碼復雜度分析 題目3&#xff1a;3160. 所有球里面不同顏色的數目思路代碼復雜度分析 …

AI 時代,產品經理該如何進化

前言 傳統的互聯網業務或者游戲業務&#xff0c;產品或者業務輸出需求&#xff0c;技術人員只需要指哪打哪就好了。而人工智能發展到當下這個尷尬的階段&#xff0c;仿佛它能干很多事&#xff0c;但是真把它往業務里擱就發現&#xff0c;這個叛逆的小東西不一定勝任的了這些有…

AI大模型學習筆記之四:生成式人工智能是如何工作的?

OpenAI 發布 ChatGPT 已經1年多了&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;也已經廣為人知&#xff0c;我們常常津津樂道于 ChatGPT 和 Claude 這樣的人工智能系統能夠神奇地生成文本與我們對話&#xff0c;并且能夠記憶上下文情境。 GPT-4多模態分析對話 Midj…

數字機頂盒、顯示器方案DCDC芯片OC5816 2A,18V同步降壓DC-DC

概述 OC5816 是一款 2A 的高集成度、高效率同步整流降壓轉換器。在一個相當寬的輸出電流負載范圍內&#xff0c;OC5816 可以高效工作。 OC5816 的兩種工作模式&#xff0c;固定頻率PWM 峰值電流控制和輕載 PFM 開關模式&#xff0c;允許系統高效工作在一個相當寬的輸出電流…