redis學習記錄08 分片

2021-07-30 21:29:48 字數 1972 閱讀 4294

redis的分片(sharding或者partitioning)技術是指將資料分散到多個redis例項中的方法,分片之後,每個redis擁有一部分原資料集的子集。在資料量非常大時,這種技術能夠將資料量分散到若干主機的redis例項上,進而減輕單台redis例項的壓力。分片技術能夠以更易擴充套件的方式使用多台計算機的儲存能力(這裡主要指記憶體的儲存能力)和計算能力:

(1)從儲存能力的角度,分片技術通過使用多台計算機的記憶體來承擔更大量的資料,如果沒有分片技術,那麼redis的儲存能力將受限於單台主機的記憶體大小。

(2) 從計算能力的角度,分片技術通過將計算任務分散到多核或者多台主機中,能夠充分利用多核、多台主機的計算能力。

採用分片之後,資料將被分散到4個redis例項中,對資料的操作也被分散到每個redis例項中,此時單台主機的壓力將大大減輕。

分片的部署,即例項2中分片演算法被放在**?是在分片時需要首先考慮的問題,分片部署方式一般分為以下三種:

(1)在客戶端做分片;這種方式在客戶端確定要連線的redis例項,然後直接訪問相應的redis例項;

(2)在**中做分片;這種方式中,客戶端並不直接訪問redis例項,它也不知道自己要訪問的具體是哪個redis例項,而是由****請求和結果;其工作過程為:客戶端先將請求傳送給**,**通過分片演算法確定要訪問的是哪個redis例項,然後將請求傳送給相應的redis例項,redis例項將結果返回給**,**最後將結果返回給客戶端。

(3)在redis伺服器端做分片;這種方式被稱為「查詢路由」,在這種方式中客戶端隨機選擇乙個redis例項傳送請求,如果所請求的內容不再當前redis例項中它會負責將請求轉交給正確的redis例項,也有的實現中,redis例項不會**請求,而是將正確redis的資訊發給客戶端,由客戶端再去向正確的redis例項傳送請求。

上面主要描述了分片的優點,當然分片的存在也有缺陷,例如:

(1) 通常無法支援涉及多鍵的操作;在redis中有很多一次操作多個key的操作,例如求集合交集的sinter操作,該操作將涉及到多個鍵,而這多個鍵有可能被分片到不同的redis例項中,此時就無法執行這種操作。

(2)redis的事務操作中涉及多個鍵時也不能用;

(3)分片將導致資料處理更加複雜;例如在分片過程中,隨著redis例項的增加,資料備份等操作都將會變得更加複雜。

(4)redis目前不支援動態分片操作,擴容和縮容操作都會比較複雜,尤其分片操作部署在客戶端時,需要重新配置和啟動客戶端。在使用過程中縮容用的不多,擴容可以採用後面介紹的預分片策略來緩解此問題。

jedis通過一致性雜湊分片演算法來實現資料分片,一致性雜湊演算法:簡單用jedis分片連線池來實現多redis的master節點進行資料分片,步驟如下:

1. 部署2個redis master節點。

2. 用shardedjedispool連線redis maser節點,並將資料根據一致性雜湊演算法存放到不同的master節點,從而達成資料分片。

客戶端**如下:

public

class

redisshardpooltest

/**

*@param args

*/public

static

void

main(string args) ";

shardedjedis jds =null;

try catch (exception e)

finally

} }

private

static

int index = 1;

public

static string generatekey()

}

通過執行結果會發現這100條資料會被分開存放到10.7.12.52和10.7.112.52機器上的master節點中,檢視原始碼會發現jds.set(key,value)方法會呼叫jds.getshared(key)來根據key的hash值來獲取該key應該存放到那個節點上。

轉至

redis 三 分片 哨兵

前提說明 redis可以通過修改記憶體的大小 實現資料的儲存.但是記憶體的資源不易設定的過大,因為很多的時間都浪費在記憶體的定址中.需求 如果有海量的資料,需要redis儲存 問 應該如何處理?解決方案 可以採用redis分片機制 實現記憶體資料的擴容.知識點 採用redis分片 主要的目的就是為了...

mycat學習 4 分片JOIN,分片規則

mycat 支援跨分片join,主要有四種方法 1 全域性表 字典表 變動不頻繁,資料量總體變化不大,資料規模不大很少超過10w條記錄 可以做為全域性表 特性 1 全域性表的插入,更新操作會實時在所有節點上執行,保持各個分片的資料一致性。沒有太激烈的update操作。2 全域性表查詢只從乙個節點獲取...

mongodb 5 分片集群

分片集群是指將資料橫向拆分,將乙個資料伺服器上將資料依據一定的規則分散到多台伺服器上。以降低單台伺服器的訪問壓力,提高資料服務的效能。幾乎所有的資料庫系統都能夠手動進行分片,但是這在路由管理上,以及各個分片的管理上都相對困難。mongodb支援自動分片,就可以擺脫手動分片管理困難的問題。集群自動切分...