欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

redis數(shù)據(jù)傾斜處理方法

 更新時間:2022年12月20日 11:38:54   作者:wang0907  
我們在使用Redis分片集群時,集群最好的狀態(tài)就是每個實例可以處理相同或相近比例的請求,但如果不是這樣,則會出現(xiàn)某些實例壓力特別大,而某些實例特別空閑的情況發(fā)生,本文就一起來看下這種情況是如何發(fā)生的以及如何處理

寫在前面

我們在使用Redis分片集群時,集群最好的狀態(tài)就是每個實例可以處理相同或相近比例的請求,但如果不是這樣,則會出現(xiàn)某些實例壓力特別大,而某些實例特別空閑的情況發(fā)生,本文就一起來看下這種情況是如何發(fā)生的以及如何處理。

1:什么是數(shù)據(jù)傾斜

數(shù)據(jù)傾斜分為兩種,第一種是數(shù)據(jù)量傾斜,第二種是數(shù)據(jù)訪問傾斜,定義如下:

  • 數(shù)據(jù)量傾斜:數(shù)據(jù)分布的不均勻,導(dǎo)致某些實例數(shù)據(jù)特別多,進而導(dǎo)致處理的請求量大
  • 數(shù)據(jù)訪問傾斜:數(shù)據(jù)分布均勻,但是某些實例存在熱點數(shù)據(jù),進而導(dǎo)致處理的請求量大

可以看到不管是數(shù)據(jù)量傾斜,還是數(shù)據(jù)訪問傾斜,最終導(dǎo)致的結(jié)果都是發(fā)生傾斜的實例處理了更多的數(shù)據(jù)請求,壓力增大。

2:數(shù)據(jù)量傾斜

在這里插入圖片描述

數(shù)據(jù)量傾斜最常見的原因就是在手動劃分slot時,分配不均勻,除此之外,還有big key,hash tag,分別來看下。

2.1:slot分配不均勻

slot分配不均勻一般是由于手動分配造成,或者是因為某個實例節(jié)點配置較高,為了更加充分的利用其計算機資源,有意的給其分配更多的slot,但是這個多出的量其實是不好預(yù)估的,所以對于因為計算機性能差異有意分配的造成的slot不均勻還是要盡量避免,即保證所有的實例節(jié)點都具有相同的配置,然后將slot進行均勻分配。如果是已經(jīng)發(fā)生了slot分配不均勻,我們可以通過遷移slot的方式來處理,首先通過cluster slots命令查看當前slot的分配情況:

在這里插入圖片描述

上圖slot0~4095分配到了實例192.168.10.3:6379,slot12288~16383分配到了實例192.168.10.5:6379。如下是一個slot遷移的例子。

假設(shè)我們要把 Slot 300 從源實例(ID 為 3)遷移到目標實例(ID 為 5),那要怎么做呢?

第1步,我們先在目標實例5上執(zhí)行下面的命令,將Slot 300的源實例設(shè)置為實例 3,表示要從實例 3 上遷入 Slot 300。

在這里插入圖片描述

第2步,在源實例 3 上,我們把 Slot 300 的目標實例設(shè)置為 5,這表示,Slot 300 要遷出到實例 5 上,如下所示:

在這里插入圖片描述

第3步,從 Slot 300 中獲取 100 個 key。因為 Slot 中的 key 數(shù)量可能很多,所以我們需要在客戶端上多次執(zhí)行下面的這條命令,分批次獲得并遷移 key。

在這里插入圖片描述

第4步,我們把剛才獲取的 100 個 key 中的 key1 遷移到目標實例 5 上(IP 為 192.168.10.5),同時把要遷入的數(shù)據(jù)庫設(shè)置為 0 號數(shù)據(jù)庫,把遷移的超時時間設(shè)置為 timeout。我們重復(fù)執(zhí)行 MIGRATE 命令,把 100 個 key 都遷移完。

在這里插入圖片描述

最后,我們重復(fù)執(zhí)行第 3 和第 4 步,直到 Slot 中的所有 key 都遷移完成。

從Redis3.0.6開始,你也可以使用KEYS選項,一次遷移多個key(key1、2、3),這樣可以提升遷移效率。

在這里插入圖片描述

2.2:big key

bigkey,主要包括string的值特別大,和集合類型的元素特別多兩種情況,對于string,我們需要在業(yè)務(wù)上處理,分散到多個key存儲,然后在業(yè)務(wù)上多次獲取,并進行合并,比如如下劃分:

key:
    names
劃分為
key:
    name:1_1000 ... name:100001_101001 

其實這里是用到了分片的思想,對于集合的處理方式和string也是類似的,比如有一個包含100萬個元素的hash集合user:info,分片存儲后如下:

key: 
    user:info
key: 
    user:info:1_100000,user:info:100001_20000,...,user:info:900001_1000000

對于bigkey我們還是要在業(yè)務(wù)上盡量避免,因為bigkey的副作用不僅僅如此,還有如數(shù)據(jù)同步慢,數(shù)據(jù)恢復(fù)慢,刪除慢等。

2.3:hash tag

我們正常設(shè)置key,計算其slot值的方式是crc16(key)%16384,但是如果是使用了{},比如keypart1:{keypart2},則計算的邏輯就變成了crc16(keypart2)%16384,一般用在希望某幾類key分布到同一個實例,進而可以方便的進行某些操作的場景,如事務(wù),簡單的計算等,但是一般帶來的的負面影響要比收益大的多,比如造成這里分析的數(shù)據(jù)傾斜問題,數(shù)據(jù)傾斜影響的是整個Redis實例,影響更大,所以在實踐中要盡量避免使用hash tag。

3:數(shù)據(jù)訪問傾斜

在這里插入圖片描述

數(shù)據(jù)訪問傾斜出現(xiàn)的場景一般就是熱點數(shù)據(jù),比如首頁的新聞,某明星出軌離婚等爆點新聞,對于這類問題一般有如下的解決方法:

1:拷貝幾份數(shù)據(jù),以分散到不同的實例
    比如news:1,可以虛擬出幾份數(shù)據(jù),如news:1:A,news:1:B,...news:1:Z,客戶端訪問時隨機的增加A~Z的后綴,分散壓力,這種方法可以用于只讀的熱點數(shù)據(jù)
2:增加機器配置
    這種方法是針對讀寫數(shù)據(jù),因為如果是按照方案1,數(shù)據(jù)的一致性將會帶來額外的性能開銷,以及更多潛在的bug。

到此這篇關(guān)于redis之數(shù)據(jù)傾斜如何處理的文章就介紹到這了,更多相關(guān)redis數(shù)據(jù)傾斜內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 內(nèi)存型數(shù)據(jù)庫Redis持久化小結(jié)

    內(nèi)存型數(shù)據(jù)庫Redis持久化小結(jié)

    redis是一個支持持久化的內(nèi)存數(shù)據(jù)庫,也就是說redis需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到磁盤來保證持久化.redis支持四種持久化方式,一是 Snapshotting(快照)也是默認方式,二是Append-only file(縮寫aof)的方式,三是虛擬內(nèi)存方式,四是diskstore方式.今天我們總結(jié)下前2種。
    2017-09-09
  • Redis慢查詢的具體使用

    Redis慢查詢的具體使用

    慢查詢顧名思義就是比較慢的查詢,但是究竟是哪里慢呢?本文詳細的介紹了Redis慢查詢的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2023-06-06
  • Redis異步隊列的實現(xiàn)及應(yīng)用場景

    Redis異步隊列的實現(xiàn)及應(yīng)用場景

    異步隊列是一種底層基于異步 I/O 模型的消息隊列,用于在分布式系統(tǒng)中進行同步和異步的通訊和協(xié)作,本文主要介紹了Redis異步隊列的實現(xiàn)及應(yīng)用場景,感興趣的可以了解一下
    2023-12-12
  • 簡單粗暴的Redis數(shù)據(jù)備份和恢復(fù)方法

    簡單粗暴的Redis數(shù)據(jù)備份和恢復(fù)方法

    這里我們來講解一個簡單粗暴的Redis數(shù)據(jù)備份和恢復(fù)方法,有一個在不同主機上遷移Redis數(shù)據(jù)的示例,還有一個備份腳本實現(xiàn)的關(guān)鍵點提示,一起來看一下:
    2016-06-06
  • 關(guān)于redis Key淘汰策略的實現(xiàn)方法

    關(guān)于redis Key淘汰策略的實現(xiàn)方法

    下面小編就為大家?guī)硪黄P(guān)于redis Key淘汰策略的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java實現(xiàn)多級緩存的方法詳解

    Java實現(xiàn)多級緩存的方法詳解

    對于高并發(fā)系統(tǒng)來說,有三個重要的機制來保障其高效運行,它們分別是:緩存、限流和熔斷,所以本文就來和大家探討一下多級緩存的實現(xiàn)方法,希望對大家有所幫助
    2024-02-02
  • Redis連接池配置及初始化實現(xiàn)

    Redis連接池配置及初始化實現(xiàn)

    這篇文章主要介紹了Redis連接池配置及初始化實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-03-03
  • Redis過期時間的設(shè)計與實現(xiàn)代碼

    Redis過期時間的設(shè)計與實現(xiàn)代碼

    在?Redis?中,鍵的過期時間設(shè)計與實現(xiàn)是一個重要的功能,這使得?Redis?可以自動刪除在指定時間后不再需要的鍵,下面詳細介紹?Redis?過期時間的設(shè)計和實現(xiàn),包括設(shè)置過期時間、過期鍵的存儲結(jié)構(gòu)、過期鍵的刪除策略等,需要的朋友可以參考下
    2024-08-08
  • Redis安裝啟動及常見數(shù)據(jù)類型

    Redis安裝啟動及常見數(shù)據(jù)類型

    這篇文章主要介紹了Redis安裝啟動及常見數(shù)據(jù)類型,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 深入理解Redis內(nèi)存回收和內(nèi)存淘汰機制

    深入理解Redis內(nèi)存回收和內(nèi)存淘汰機制

    Redis使用多種過期策略和內(nèi)存淘汰機制來管理內(nèi)存,本文主要介紹了深入理解Redis內(nèi)存回收和內(nèi)存淘汰機制, 具有一定的參考價值,感興趣的可以了解一下
    2024-06-06

最新評論