国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一文拿捏分布式、分布式緩存及其問(wèn)題解決

這篇具有很好參考價(jià)值的文章主要介紹了一文拿捏分布式、分布式緩存及其問(wèn)題解決。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一文拿捏分布式、分布式緩存及其問(wèn)題解決,分布式,分布式

1.分布式

1.集中式

傳統(tǒng)的計(jì)算模型通常是集中式的,所有的計(jì)算任務(wù)和數(shù)據(jù)處理都由單一的計(jì)算機(jī)或服務(wù)器完成。然而,隨著數(shù)據(jù)量和計(jì)算需求的增加,集中式系統(tǒng)可能會(huì)面臨性能瓶頸和可靠性問(wèn)題。

故而引出了分布式↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

2.分布式

分布式是一種利用多臺(tái)計(jì)算機(jī)協(xié)同工作來(lái)完成任務(wù)的計(jì)算模型。

分布式系統(tǒng)的目標(biāo)是通過(guò)將任務(wù)和數(shù)據(jù)分割成小塊,將計(jì)算任務(wù)分發(fā)到不同的計(jì)算節(jié)點(diǎn)上,充分利用多臺(tái)計(jì)算機(jī)的處理能力,以應(yīng)對(duì)大規(guī)模的計(jì)算需求,以提高性能、可擴(kuò)展性和容錯(cuò)性。

分布式系統(tǒng)的一些問(wèn)題:數(shù)據(jù)一致性、通信延遲、故障處理等。為了解決這些問(wèn)題,需要使用各種技術(shù)和算法,如分布式數(shù)據(jù)庫(kù)、消息隊(duì)列、負(fù)載均衡、分布式存儲(chǔ)等。

2.分布式緩存

例如:redis緩存

分布式緩存是用于存儲(chǔ)和管理數(shù)據(jù)以提高性能和響應(yīng)速度的一種技術(shù)。

通常用于加速應(yīng)用程序的數(shù)據(jù)訪問(wèn),減輕后端數(shù)據(jù)庫(kù)或其他數(shù)據(jù)存儲(chǔ)系統(tǒng)的負(fù)載。

在分布式緩存中,數(shù)據(jù)被存儲(chǔ)在位于應(yīng)用程序和數(shù)據(jù)存儲(chǔ)系統(tǒng)之間的一個(gè)或多個(gè)緩存節(jié)點(diǎn)中。這些節(jié)點(diǎn)可以位于不同的服務(wù)器或計(jì)算機(jī)上,形成一個(gè)分布式的緩存網(wǎng)絡(luò)。當(dāng)應(yīng)用程序需要訪問(wèn)數(shù)據(jù)時(shí),它首先會(huì)查詢緩存,如果緩存中存在數(shù)據(jù),就可以快速獲取而不必訪問(wèn)原始數(shù)據(jù)存儲(chǔ)系統(tǒng)。

需要注意的問(wèn)題:

  1. 緩存穿透

  2. 緩存擊穿

  3. 緩存雪崩

  4. 數(shù)據(jù)一致性

1.緩存穿透

指查詢一個(gè)數(shù)據(jù)庫(kù)中一定不存在的數(shù)據(jù),由于緩存是不命中,將去查詢數(shù)據(jù)庫(kù),但是數(shù)據(jù)庫(kù)也無(wú)此記錄

解決方案:

1.緩存null

當(dāng)數(shù)據(jù)庫(kù)中查不到數(shù)據(jù)的時(shí)候,緩存一個(gè)空對(duì)象,然后給這個(gè)空對(duì)象的緩存設(shè)置一個(gè)過(guò)期時(shí)間,這樣下次再查詢?cè)摂?shù)據(jù)的時(shí)候,就可以直接從緩存中拿到,從而達(dá)到了減小數(shù)據(jù)庫(kù)壓力的目的

存在缺點(diǎn):

  1. 需要緩存層提供更多的內(nèi)存空間來(lái)緩存這些空對(duì)象,當(dāng)這種空對(duì)象很多的時(shí)候,就會(huì)浪費(fèi)更多的內(nèi)存;

  2. 會(huì)導(dǎo)致緩存層和存儲(chǔ)層的數(shù)據(jù)不一致,即使在緩存空對(duì)象時(shí)給它設(shè)置了一個(gè)很短的過(guò)期時(shí)間,那也會(huì)導(dǎo)致這一段時(shí)間內(nèi)的數(shù)據(jù)不一致問(wèn)題。

2.使用布隆過(guò)濾器

布隆過(guò)濾器:

布隆過(guò)濾器,就是一種數(shù)據(jù)結(jié)構(gòu),它是由一個(gè)長(zhǎng)度為m bit的位數(shù)組與n個(gè)hash函數(shù)組成的數(shù)據(jù)結(jié)構(gòu),位數(shù)組中每個(gè)元素的初始值都是0。在初始化布隆過(guò)濾器時(shí),會(huì)先將所有key進(jìn)行n次hash運(yùn)算,這樣就可以得到n個(gè)位置,然后將這n個(gè)位置上的元素改為1。這樣,就相當(dāng)于把所有的key保存到了布隆過(guò)濾器中了。

布隆過(guò)濾器就相當(dāng)于一個(gè)位于客戶端與緩存層中間的攔截器一樣,負(fù)責(zé)判斷key是否在集合中存在

存在缺點(diǎn):

有誤判的可能(位數(shù)組長(zhǎng)度越大,誤判率越低): 例如:

有三個(gè)key,經(jīng)hash運(yùn)算后

key1: 1 、2 、4

key2: 2 、5 、6

key3: 4、 5 、6 由于4、5、6都以存在已置為1,布隆過(guò)濾器就認(rèn)為key3在庫(kù)中存在

2.緩存擊穿

對(duì)于設(shè)置了過(guò)期時(shí)間的key(一個(gè)key),緩存在某個(gè)時(shí)間點(diǎn)過(guò)期了,在該熱點(diǎn)數(shù)據(jù)重新載入緩存之前,恰好這時(shí)間點(diǎn)對(duì)這個(gè)Key有大量的并發(fā)請(qǐng)求過(guò)來(lái),這些請(qǐng)求發(fā)現(xiàn)緩存過(guò)期一般都會(huì)從后端 DB 加載數(shù)據(jù)并回設(shè)到緩存,這個(gè)時(shí)候大并發(fā)的請(qǐng)求可能會(huì)瞬間把 DB 壓垮。

解決方案:

1.永遠(yuǎn)不過(guò)期
  1. 不對(duì)這個(gè)key設(shè)置過(guò)期時(shí)間

  2. 正常給key設(shè)置過(guò)期時(shí)間,同時(shí)在后臺(tái)同時(shí)啟一個(gè)定時(shí)任務(wù)去定時(shí)地更新這個(gè)緩存

2.使用分布式鎖

同一時(shí)刻只能有一個(gè)查詢請(qǐng)求重新加載熱點(diǎn)數(shù)據(jù)到緩存中。

這樣,其他的線程只需等待該線程運(yùn)行完畢,即可重新從Redis中獲取數(shù)據(jù)

整體的思想:獲取鎖的時(shí)候向Redis中插入數(shù)據(jù),釋放鎖的時(shí)候從Redis中刪除數(shù)據(jù)。

使用的命令: setnx

詳細(xì)往下看↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

3.緩存雪崩

當(dāng)緩存中有大量的key在同一時(shí)刻過(guò)期,或者Redis直接宕機(jī)了,導(dǎo)致大量的查詢請(qǐng)求全部到達(dá)數(shù)據(jù)庫(kù),造成數(shù)據(jù)庫(kù)查詢壓力驟增,甚至直接掛掉

解決方案:

1.添加過(guò)期隨機(jī)數(shù),使key均勻失效

將key的過(guò)期時(shí)間后面加上一個(gè)隨機(jī)數(shù),這個(gè)隨機(jī)數(shù)值的范圍可以根據(jù)自己的業(yè)務(wù)情況自行設(shè)定,這樣可以讓key均勻的失效,避免大批量的同時(shí)失效。

4.數(shù)據(jù)一致性問(wèn)題

因?yàn)閿?shù)據(jù)庫(kù)與緩存是不同的組件,操作必須有先后順序,無(wú)法像數(shù)據(jù)庫(kù)的事務(wù)一樣滿足ACID的特性,所以就會(huì)出現(xiàn)數(shù)據(jù)在緩存中與在數(shù)據(jù)

庫(kù)中不一致的問(wèn)題。

在更新的時(shí)候,操作緩存和數(shù)據(jù)庫(kù)無(wú)疑就是以下四種可能之一:

1.雙寫(xiě)模式:

  • 先更新緩存,再更新數(shù)據(jù)庫(kù)

  • 先更新數(shù)據(jù)庫(kù),再更新緩存

2.失效模式:

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

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

1.先更新緩存,在更新數(shù)據(jù)庫(kù)

如果我成功更新了緩存,但是在執(zhí)行更新數(shù)據(jù)庫(kù)的那一步,服務(wù)器突然宕機(jī)了,那么此時(shí),我的緩存中是最新的數(shù)據(jù),而數(shù)據(jù)庫(kù)中是舊的數(shù)據(jù)。

2.先更新數(shù)據(jù)庫(kù),在更新緩存

如果我成功更新了數(shù)據(jù)庫(kù),但是在執(zhí)行更新緩存的那一步,服務(wù)器突然宕機(jī)了,那么此時(shí),我的緩存中就是老數(shù)據(jù),而數(shù)據(jù)庫(kù)中是新的數(shù)據(jù)。

3.先刪除緩存,在更新數(shù)據(jù)庫(kù)
非高并發(fā)情況下可保證數(shù)據(jù)一致性:

若刪除緩存成功,更新數(shù)據(jù)庫(kù)失敗,下次操作會(huì)去數(shù)據(jù)庫(kù)中獲取該數(shù)據(jù),并將最新數(shù)據(jù)寫(xiě)入緩存

讀寫(xiě)發(fā)情況下會(huì)出現(xiàn)數(shù)據(jù)不一致問(wèn)題:

一文拿捏分布式、分布式緩存及其問(wèn)題解決,分布式,分布式

4.先更新數(shù)據(jù)庫(kù),在刪除緩存
1.更新數(shù)據(jù)庫(kù)成功了,而刪除緩存失敗

數(shù)據(jù)庫(kù)中就會(huì)是新數(shù)據(jù),而緩存中是舊數(shù)據(jù),數(shù)據(jù)就出現(xiàn)了不一致情況:

一文拿捏分布式、分布式緩存及其問(wèn)題解決,分布式,分布式

2.更新數(shù)據(jù)庫(kù)成功了,刪除緩存也執(zhí)行成功

還是會(huì)造成數(shù)據(jù)的不一致性

但是此處達(dá)成這個(gè)數(shù)據(jù)不一致性的條件明顯會(huì)比起其他的方式更為困難

  • 時(shí)刻1:讀請(qǐng)求的時(shí)候,緩存正好過(guò)期

  • 時(shí)刻2:讀請(qǐng)求在寫(xiě)請(qǐng)求更新數(shù)據(jù)庫(kù)之前查詢數(shù)據(jù)庫(kù),

  • 時(shí)刻3:寫(xiě)請(qǐng)求,在更新數(shù)據(jù)庫(kù)之后,要在讀請(qǐng)求成功寫(xiě)入緩存前,先執(zhí)行刪除緩存操作。

這通常是很難做到的,因?yàn)樵谡嬲牟l(fā)開(kāi)發(fā)中,更新數(shù)據(jù)庫(kù)是需要加鎖的,不然沒(méi)一點(diǎn)安全性

一文拿捏分布式、分布式緩存及其問(wèn)題解決,分布式,分布式

5.延遲雙刪

先進(jìn)行緩存清除,在更新數(shù)據(jù)庫(kù),最后(延遲N秒確保數(shù)據(jù)庫(kù)已更新)再執(zhí)行緩存清除。進(jìn)行兩次刪除,且中間需要延遲一段時(shí)間

一文拿捏分布式、分布式緩存及其問(wèn)題解決,分布式,分布式

上述方案在極端情況下,如果第三步刪除失敗仍然可能導(dǎo)致數(shù)據(jù)一致性問(wèn)題,解決方案有:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-727517.html

?????引入MQ重試機(jī)制,基于數(shù)據(jù)庫(kù)binlog的方式增量解析、訂閱和消費(fèi)

到了這里,關(guān)于一文拿捏分布式、分布式緩存及其問(wèn)題解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Redis從基礎(chǔ)到進(jìn)階篇(四)----性能調(diào)優(yōu)、分布式鎖與緩存問(wèn)題

    Redis從基礎(chǔ)到進(jìn)階篇(四)----性能調(diào)優(yōu)、分布式鎖與緩存問(wèn)題

    目錄 一、Redis 集群演變 1.1?Replication+Sentinel*高可用 1.2?Proxy+Replication+Sentinel(僅僅了解) 1.3?Redis Cluster 集群 (重點(diǎn)) 1.3.1?Redis-cluster架構(gòu)圖 1.3.2?工作原理 1.3.3?主從切換 1.3.4 副本漂移 1.3.5 分片漂移 二、Redis版本歷史(增加了解) 三、Redis 5.0 源碼清單 (對(duì)源碼感興趣的,看一下

    2024年02月09日
    瀏覽(25)
  • Redis 分布式鎖存在什么問(wèn)題 ?如何解決 ?

    Redis 分布式鎖存在什么問(wèn)題 ?如何解決 ?

    目錄 1. 如何實(shí)現(xiàn)分布式鎖 2. Redis 分布式鎖存在什么問(wèn)題 2.1 解決死鎖問(wèn)題 2.2 解決鎖誤刪問(wèn)題 Redis 天生就可以作為一個(gè)分布式系統(tǒng)來(lái)使用,所以它實(shí)現(xiàn)的鎖都是分布式鎖。 Redis 可以通過(guò) setnx(set if not exists)命令實(shí)現(xiàn)分布式鎖~ setnx mylock true? -? 加鎖 del mylock? -? 釋放鎖 通過(guò)

    2024年02月11日
    瀏覽(28)
  • 分布式系統(tǒng)架構(gòu)設(shè)計(jì)之分布式緩存技術(shù)選型

    分布式系統(tǒng)架構(gòu)設(shè)計(jì)之分布式緩存技術(shù)選型

    隨著互聯(lián)網(wǎng)業(yè)務(wù)的快速發(fā)展,分布式系統(tǒng)已經(jīng)成為了解決大規(guī)模并發(fā)請(qǐng)求、高可用性、可擴(kuò)展性等問(wèn)題的重要手段。在分布式系統(tǒng)中,緩存作為提高系統(tǒng)性能的關(guān)鍵技術(shù),能夠顯著降低數(shù)據(jù)庫(kù)負(fù)載、減少網(wǎng)絡(luò)延遲、提高數(shù)據(jù)訪問(wèn)速度。當(dāng)面對(duì)大量并發(fā)請(qǐng)求時(shí),如果每次都直接

    2024年02月03日
    瀏覽(519)
  • 分布式:一文吃透分布式事務(wù)和seata事務(wù)

    分布式:一文吃透分布式事務(wù)和seata事務(wù)

    什么是事務(wù) 事務(wù)是并發(fā)控制的單位,是用戶定義的一個(gè)操作序列。 事務(wù)特性 原子性(Atomicity): 事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位,事務(wù)中包括的諸操作要么全做,要么全不做。 一致性(Consistency): 事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。一致性

    2024年02月07日
    瀏覽(21)
  • SpringBoot整合Redis、以及緩存穿透、緩存雪崩、緩存擊穿的理解分布式情況下如何添加分布式鎖 【續(xù)篇】

    SpringBoot整合Redis、以及緩存穿透、緩存雪崩、緩存擊穿的理解分布式情況下如何添加分布式鎖 【續(xù)篇】

    上一篇實(shí)現(xiàn)了單體應(yīng)用下如何上鎖,這一篇主要說(shuō)明如何在分布式場(chǎng)景下上鎖 上一篇地址:加鎖 需要注意的點(diǎn)是: 在上鎖和釋放鎖的過(guò)程中要保證 原子性操作 核心是上鎖和解鎖的過(guò)程 關(guān)于解鎖使用腳本參考:SET key value [EX seconds] [PX milliseconds] [NX|XX] 3.1 一個(gè)服務(wù)按照多個(gè)端口同時(shí)

    2023年04月10日
    瀏覽(29)
  • 論文-分布式-并發(fā)控制-并發(fā)控制問(wèn)題的解決方案

    論文-分布式-并發(fā)控制-并發(fā)控制問(wèn)題的解決方案

    目錄 參考文獻(xiàn) 問(wèn)題 解法與證明 易讀版本 參考文獻(xiàn) Dijkstra于1965年發(fā)表文章Solution of a Problem in Concurrent Programming Control,引出并發(fā)系統(tǒng)下的互斥(mutual exclusion)問(wèn)題,自此開(kāi)辟了分布式計(jì)算領(lǐng)域 Dijkstra在文中給出了基于共享存儲(chǔ)原子性訪問(wèn)的解決方案只有十多行代碼,但閱讀起來(lái)

    2024年02月08日
    瀏覽(34)
  • Redis 分布式緩存

    Redis 分布式緩存

    單點(diǎn) Redis 的問(wèn)題及解決 數(shù)據(jù)丟失:實(shí)現(xiàn)Redis數(shù)據(jù)持久化 并發(fā)能力:搭建主從集群,實(shí)現(xiàn)讀寫(xiě)分離 存儲(chǔ)能力:搭建分片集群,利用插槽機(jī)制實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)容 故障恢復(fù)能力:利用哨兵機(jī)制,實(shí)現(xiàn)健康檢測(cè)和自動(dòng)恢復(fù) RDB RDB全稱Redis Database Backup file (Redis數(shù)據(jù)備份文件),也被叫做

    2024年02月10日
    瀏覽(24)
  • Redis分布式緩存

    Redis分布式緩存

    -- 基于Redis集群解決單機(jī)Redis存在的問(wèn)題 單機(jī)的Redis存在四大問(wèn)題: Redis有兩種持久化方案: RDB持久化 AOF持久化 ? ? ? ?RDB全稱Redis Database Backup file(Redis數(shù)據(jù)備份文件),也被叫做 Redis數(shù)據(jù)快照 。簡(jiǎn)單來(lái)說(shuō)就是把 內(nèi)存中的所有數(shù)據(jù)都記錄到磁盤(pán) 中。當(dāng)Redis實(shí)例故障重啟后,

    2024年02月12日
    瀏覽(19)
  • 分布式緩存

    – 基于Redis集群解決單機(jī)Redis存在的問(wèn)題 Redis有兩種持久化方案: RDB持久化 AOF持久化 RDB全稱Redis Database Backup file(Redis數(shù)據(jù)備份文件),也被叫做Redis數(shù)據(jù)快照。簡(jiǎn)單來(lái)說(shuō)就是 把內(nèi)存中的所有數(shù)據(jù) 都記錄到磁盤(pán)中。當(dāng)Redis實(shí)例故障重啟后,從磁盤(pán)讀取快照文件,恢復(fù)數(shù)據(jù)。快

    2023年04月25日
    瀏覽(20)
  • Golang實(shí)現(xiàn)Redis分布式鎖解決秒殺問(wèn)題

    先寫(xiě)一個(gè)腳本sql,插入2000個(gè)用戶 登錄是通過(guò)2個(gè)字段,一個(gè)是mobile,一個(gè)是password,生成了mobile從1到2000,密碼默認(rèn)是123456 然后寫(xiě)一個(gè)單元測(cè)試,實(shí)現(xiàn)新注冊(cè)的2000個(gè)用戶登錄,然后獲取token 我們使用有緩沖的通道和sync.WaitGroup信號(hào)量,來(lái)控制協(xié)程的數(shù)量,經(jīng)過(guò)測(cè)試,發(fā)現(xiàn)limi

    2024年02月14日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包