最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis數(shù)據(jù)一致性詳解

 更新時間:2024年11月14日 09:04:36   作者:scanklm  
文章主要討論了分布式系統(tǒng)中的數(shù)據(jù)一致性模型、緩存使用場景以及數(shù)據(jù)同步策略,一致性模型包括強一致性、弱一致性和最終一致性,緩存使用場景主要在高并發(fā)讀取數(shù)據(jù)時提升性能,數(shù)據(jù)同步策略分為先刪除緩存再更新數(shù)據(jù)庫和先更新數(shù)據(jù)庫再刪除緩存兩種

1、一致性

一致性是指系統(tǒng)中各節(jié)點數(shù)據(jù)保持一致。分布式系統(tǒng)中,可以理解為多個節(jié)點中的數(shù)據(jù)是一致的。

一致性根據(jù)嚴苛程度分類:

強一致性:寫進去的數(shù)據(jù)是什么,讀出來的數(shù)據(jù)就是什么,對性能影響最大;

弱一致性:數(shù)據(jù)寫入成功后,系統(tǒng)不保證能立刻讀出最新的數(shù)據(jù),也不承諾多久之后數(shù)據(jù)可以達到一致,但保證到某個時間級別后,數(shù)據(jù)能達到一致;

最終一致性:最終一致性是弱一致性的一個特例,最終一致性同樣只保證數(shù)據(jù)寫入成功后,在某個時間點后數(shù)據(jù)會達到一致。這個系統(tǒng)無法保證強一致性的時間片段被稱為不一致窗口。不一致時間窗口的時間長短取決于很多因素,比如副本個數(shù)、網(wǎng)絡延遲、系統(tǒng)負載等。

最終一致性是弱一致性中非常受大眾推崇的一種一致性模型,也是目前業(yè)界在大型分布式系統(tǒng)的數(shù)據(jù)一致性上比較推崇的模型。

2、緩存使用場景

對于大部分系統(tǒng)而言,高并發(fā)常見于讀數(shù)據(jù)的場景,對于此場景我們可以使用緩存提升數(shù)據(jù)查詢速度。當我們使用Redis作緩存的時候,常見場景如下所示:

緩存存在

如果數(shù)據(jù)在緩存中存在,則直接從緩存返回數(shù)據(jù)至應用,無需查詢數(shù)據(jù)庫

緩存不存在

如果數(shù)據(jù)在緩存中不存在,則需查詢數(shù)據(jù)庫獲取數(shù)據(jù)并更新緩存。

對于大部分系統(tǒng)而言最終數(shù)據(jù)都會存儲在數(shù)據(jù)庫中,也就是系統(tǒng)需已數(shù)據(jù)庫中數(shù)據(jù)為準,那么對于上圖緩存存在的場景下,當數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生變化時,就可能會出現(xiàn)數(shù)據(jù)不一致的問題。

實際情況下考慮網(wǎng)絡、操作、異常等種種因素,根本無法保證可以同時更新所有副本數(shù)據(jù)使得數(shù)據(jù)保持一致。因此,如何在最大程度上保證各副本數(shù)據(jù)一致的同時也不影響系統(tǒng)性能,成了各系統(tǒng)需要均衡的問題。

3、數(shù)據(jù)同步策略

為保證緩存數(shù)據(jù)與數(shù)據(jù)庫數(shù)據(jù)一致,主要考慮如下兩種策略實現(xiàn):

1、先刪除緩存,再更新數(shù)據(jù)庫;

2、先更新數(shù)據(jù)庫,再刪除緩存;

當然除了這兩種策略之外,還有其他策略如將刪除緩存改為更新緩存,但考慮高頻繁更新及熱冷數(shù)據(jù)場景下緩存使用效率問題,個人不推薦更新緩存方式,所以此處不做展開。

3.1 先刪除緩存,在更新數(shù)據(jù)庫

操作流程如圖

如上圖,若先刪除緩存,再更新數(shù)據(jù)庫,則可能存在如下問題:

若步驟5、6、7順序發(fā)生在步驟3、4之前或步驟3更新失敗,則步驟8中線程B查詢出的數(shù)據(jù)為舊數(shù)據(jù),導致重新寫入緩存的也為舊數(shù)據(jù)。

3.1.1 解決思路

失敗重試 + 延時雙刪

如圖中紅色部分所述,線程A在步驟4數(shù)據(jù)更新成功后,延遲一段時間,再次刪除緩存,這樣即可解決并發(fā)場景下線程B并發(fā)操作導致緩存與數(shù)據(jù)庫數(shù)據(jù)不一致問題。延遲時間視實際業(yè)務場景對時間敏感度而定。

3.2 先更新數(shù)據(jù)庫,再刪除緩存

操作流程如圖

如上圖,若先更新數(shù)據(jù)庫,再刪除緩存,則可能存在如下問題:

步驟5、6發(fā)生在步驟3之前或步驟3刪除緩存失敗,則線程B通過步驟5會拿到緩存數(shù)據(jù),但此時獲取到的緩存數(shù)據(jù)仍為舊數(shù)據(jù)。

3.2.1 解決思路

訂閱binlog

數(shù)據(jù)庫的每一步操作均會寫入binlog日志,可以通過監(jiān)聽binlog,實時感知數(shù)據(jù)變化情況,根據(jù)數(shù)據(jù)變化情況刪除redis并添加重試機制,直至redis刪除成功。

引入消息隊列

上圖步驟3中若Redis刪除失敗,則將Redis key放入消息隊列,消費端監(jiān)聽消息隊列并刪除Redis直至刪除成功;

總結(jié)

需要注意的是3.1.1 和 3.2.1中描述的解決方案也只能保證最終數(shù)據(jù)一致性,無法保證強一致性,如上述各場景中若線程A操作異常,在通過3.1.1 和 3.2.1的方式解決問題之前,其他線程仍有可能獲取到臟數(shù)據(jù)。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis持久化機制RDB的實現(xiàn)

    Redis持久化機制RDB的實現(xiàn)

    在Redis中,RDB是一種將內(nèi)存中的數(shù)據(jù)保存到磁盤上的持久化機制,本文主要介紹了Redis持久化機制RDB的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Redis 執(zhí)行性能測試

    Redis 執(zhí)行性能測試

    這篇文章主要介紹了Redis 執(zhí)行性能測試的方法,文中講解非常細致,幫助大家更好的理解和學習redis,感興趣的朋友可以了解下
    2020-08-08
  • Redis的Cluster集群搭建的實現(xiàn)步驟

    Redis的Cluster集群搭建的實現(xiàn)步驟

    本文檔只對Redis的Cluster集群做簡單的介紹,并沒有對分布式系統(tǒng)的所涉及到的概念做深入的探討。感興趣的小伙伴們可以參考一下
    2021-07-07
  • 避免Redis緩存擊穿的有效方式

    避免Redis緩存擊穿的有效方式

    本文探討了SpringBoot中防止Redis緩存擊穿的策略,包括設置隨機過期時間、使用互斥鎖、布隆過濾器和永不過期策略等,并分析了各種策略的優(yōu)缺點和適用場景,通過合理選擇和調(diào)整,可以提高應用的可靠性和用戶體驗,實踐中需要持續(xù)優(yōu)化以應對不斷變化的技術(shù)和業(yè)務環(huán)境
    2026-04-04
  • Redis Sorted Set 跳表的實現(xiàn)示例

    Redis Sorted Set 跳表的實現(xiàn)示例

    本文詳細解析了Redis中SortedSet跳表的實現(xiàn)原理,闡述了跳表的基本概念、結(jié)構(gòu)及其在SortedSet中的應用,同時也指出了跳表在實際使用中的優(yōu)勢和局限,可以更好地運用Redis的SortedSet,優(yōu)化高并發(fā)環(huán)境中的數(shù)據(jù)查詢與操作,感興趣的可以了解一下
    2024-10-10
  • Redis中常見的幾種集群部署方案

    Redis中常見的幾種集群部署方案

    本文主要介紹了Redis中常見的幾種集群部署方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Redis?生成分布式業(yè)務單號的實現(xiàn)

    Redis?生成分布式業(yè)務單號的實現(xiàn)

    在業(yè)務系統(tǒng)中很多場景下需要生成不重復的ID,本文主要介紹了Redis生成分布式業(yè)務單號的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • redis快照模式_動力節(jié)點Java學院整理

    redis快照模式_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了redis快照模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Redis集群部署Windows版本的過程詳解

    Redis集群部署Windows版本的過程詳解

    本文介紹了如何在Windows系統(tǒng)上部署Redis集群,包括從GitHub下載Windows版本的Redis、配置文件的創(chuàng)建、啟動腳本的編寫以及集群的啟動和配置過程,感興趣的朋友一起看看吧
    2025-03-03
  • 配置redis的序列化,注入RedisTemplate方式

    配置redis的序列化,注入RedisTemplate方式

    這篇文章主要介紹了配置redis的序列化,注入RedisTemplate方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論

通州区| 布拖县| 霸州市| 民丰县| 宝丰县| 城口县| 定西市| 新乐市| 阿巴嘎旗| 德昌县| 大化| 盘山县| 木兰县| 葫芦岛市| 嘉鱼县| 社旗县| 河池市| 汉川市| 蕲春县| 太和县| 赤峰市| 泾川县| 建水县| 佳木斯市| 抚远县| 高台县| 雅江县| 江油市| 济宁市| 慈利县| 河津市| 毕节市| 张家港市| 清水河县| 彰化县| 龙州县| 元江| 泗水县| 清水县| 中方县| 离岛区|