redis預分區技術及實現

來源:互聯網
上載者:User

標籤:jedis   java   redis   

    通常情況下,我們會建立多個redis執行個體來緩解單個redis執行個體的壓力。但是,隨著緩衝數量的增加,對redis進行擴容是一件非做不可的事情。對redis進行擴容可以有多種辦法,比如增加每個redis執行個體的最大記憶體。這隻是解決辦法之一,而且缺乏靈活性和可擴充性。在redis官網上,提到了預分區技術。本文將對預分區技術進行講解,同時講解jedis對分區是如何支援的。

    一、redis預分區技術

    在單個server上搭建多個redis執行個體。當需要擴充時,可以利用複製機制進行擴充,可參照如下步驟:

    1)在新的伺服器上建立空的redis執行個體。

    2)配置新的redis執行個體作為源執行個體的從執行個體,將來源資料導到新執行個體上。

    3)停止用戶端(如jedis)。

    4)將用戶端配置的執行個體ip更新為新的伺服器位址。注意此處是替換老的ip地址,不能進行追加或調換各地址的順序。

    5)在新伺服器上發送SLAVEOF NO ONE命令,使其不再作為從執行個體。

    6)用新的配置重啟用戶端。

    7)最後停止老伺服器上不再使用的舊執行個體。

    在這裡提出個問題,將老的ip地址替換後,之前映射到舊的redis執行個體上關鍵字是否能映射到對應的新redis執行個體上?本文後面將會進行分析。

    二、jedis對分區技術的實現

    jedis支援分區技術,為涉及到的幾個主要類,主要分成兩部分:

    1)記錄各個redis執行個體的地址資訊。從類圖中可以看出,ShardInfo和JedisShardInfo實現了此功能;

    2)使用一致性hash演算法,對關鍵字及redis執行個體進行映射。從類圖可以看出Sharded提供了此功能的一個基類,BinaryShardedJedis和ShardedJedis分別是位元組和字串的實現。

    在Sharded類建立時,會執行一個初始化方法。通過hash演算法,對每個redis執行個體得出160個hash值,並將該值作為TreeMap的key,將Redis執行個體的ShardInfo資訊作為value。注意:在計算hash值時,並不是使用的ip地址,而是用的一個別名。該別名要麼是在ShardInfo中設定,要麼就是以一定規則產生。具體可看下面的代碼:

    private void initialize(List<S> shards) {nodes = new TreeMap<Long, S>();for (int i = 0; i != shards.size(); ++i) {    final S shardInfo = shards.get(i);    if (shardInfo.getName() == null)for (int n = 0; n < 160 * shardInfo.getWeight(); n++) {    nodes.put(this.algo.hash("SHARD-" + i + "-NODE-" + n),    shardInfo);}    elsefor (int n = 0; n < 160 * shardInfo.getWeight(); n++) {    nodes.put(    this.algo.hash(shardInfo.getName() + "*"    + shardInfo.getWeight() + n), shardInfo);}    resources.put(shardInfo, shardInfo.createResource());}    }

    不使用ip地址進行雜湊,就可以避免在ip地址變更時,緩衝裡的資料無法訪問。這裡回答了之前提出的問題。

    實際上,這裡就是一致性雜湊演算法的實現。memcached使用的也是此演算法。160個雜湊值,實際上是單個執行個體在雜湊環上的虛擬節點。如果不建立虛擬節點,在增肌或刪除節點時,會對某個節點造成壓力,如果建立虛擬節點,可以將壓力分解到各個redis執行個體上。




redis預分區技術及實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.