1. 程式人生 > >分散式快取--系列2 -- Redis Cluster

分散式快取--系列2 -- Redis Cluster

說到Memcached和Redis的區別,我想很多人都會想到下面3點:
這裡寫圖片描述

但這都是從“單機角度“來比較。可以說,在redis cluster出來之前,memcached 和 redis 的差別還不算大。(關於Memcached為什麼是多執行緒,而Redis為什麼是單執行緒,這個在後續序列會來探討)

但從Redis 3.0開始,引入了Redis Cluster,從此Redis進入了真正的“分散式叢集“時代。而在“叢集角度“,可以說Redis已經和Memcached有了很多重大的區別。下面這個表,從“叢集角度“比較了2者的重大區別:
這裡寫圖片描述

P2P架構

下面這張圖展示了redis-cluster的結點之間的拓撲關係,可以看出它是完全的P2P模式,無中央結點,結點之間通過一個稱之為Gossip的協議進行通訊。

這裡寫圖片描述

16384個hash槽

不同於Memcached的一致性Hash,Redis準備了16384個hash槽,類似於Memcached Hash環上的一個個位置。
這16384個hash槽被分配給不同節點,存放資料時,根據資料的key計算出所在的槽,再根據槽找到對應的機器。hash函式為:CRC16(key) % 16384。

為什麼是16384?

很顯然,我們需要維護節點和槽之間的對映關係,每個節點需要知道自己有哪些槽,並且需要在結點之間傳遞這個訊息。

為了節省儲存空間,每個節點用一個Bitmap來存放其對應的槽:
2k = 2*1024*8 = 16384,也就是說,每個結點用2k的記憶體空間,總共16384個位元位,就可以儲存該結點對應了哪些槽。然後這2k的資訊,通過Gossip協議,在結點之間傳遞。

客戶端儲存路由資訊

對於客戶端來說,維護了一個路由表:每個槽在哪臺機器上。這樣儲存(key, value)時,根據key計算出槽,再根據槽找到機器。

無損擴容

雖然Hash環可以減少擴容時失效的key的數量,但畢竟有丟失。而在redis-cluster中,當新增機器之後,槽會在機器之間重新分配,同時被影響的資料會自動遷移,從而做到無損擴容。

主從複製

redis-cluster也引入了master-slave機制,從而提供了fail-over機制,這很大程度上解決了“快取雪崩“的問題。關於這個,後面有機會再詳細闡述。

相關推薦

分散式快取--系列2 -- Redis Cluster

說到Memcached和Redis的區別,我想很多人都會想到下面3點: 但這都是從“單機角度“來比較。可以說,在redis cluster出來之前,memcached 和 redis 的差別還不算大。(關於Memcached為什麼是多執行緒,而Redis為

分散式快取:Memcached, Redis, MongoDB區別

分散式快取學習之一:Memcached, Redis, MongoDB區別   Redis是一個開源(BSD許可),記憶體儲存的資料結構伺服器,可用作資料庫,快取記憶體和訊息佇列代理。   Memcached是一個自由開源的,高效能,分散式記憶體物件快取系統。   MongoDB是一個基

Redis詳解之-叢集方案:高效能(Codis3.2+Redis Cluster)(五)

[[email protected] opt]# /usr/local/zookeeper/bin/zkCli.sh -server 192.168.10.101:2181 Connecting to 192.168.10.101:2181 2017-05-12 17:27:41,481 [my

Redis從入門到高可用,分散式實踐 四(Redis Cluster

Redis Cluster 呼喚叢集 redis最高可以達到10萬/s,如果業務需要100萬/s呢? 單機器記憶體太小,無法滿足需求 資料分佈 順序分割槽的資料量不可確定性導致傾斜,不支援批量操作 雜湊分佈 節點取

分散式快取--系列1 -- Hash環/一致性Hash原理

當前,Memcached、Redis這類分散式kv快取已經非常普遍。從本篇開始,本系列將分析分散式快取相關的原理、使用策略和最佳實踐。 我們知道Memcached的分散式其實是一種“偽分散式”,也就是它的伺服器結點之間其實是相互無關聯的,之間沒有網路拓撲關係,

分散式快取】——-基於redis分散式快取的實現

一:Redis 是什麼? Redis是基於記憶體、可持久化的日誌型、Key-Value資料庫 高效能儲存系統,並提供多種語言的API. 二:出現背景 資料結構(Data Structure)需求

JAVA架構師系列課程分散式快取技術Redis權威指南

課程目標 本課程從0基礎開始,對redis的方方面面進行細粒度的講解:包括基礎操作、高階命令、各種叢集模式、動態增減節點,結合lua使用,實現搶紅包等應用場景。 適用人群 java程式設計師、技術主管、架構師、技術總監 課程簡介 基礎部分: 1.x NOSQL(Redis)簡介、Redis安裝部署與

分散式快取技術redis學習系列(四)——redis高階應用(叢集搭建、叢集分割槽原理、叢集操作)

Redis叢集簡介 Redis 叢集是3.0之後才引入的,在3.0之前,使用哨兵(sentinel)機制(本文將不做介紹,大家可另行查閱)來監控各個節點之間的狀態。Redis 叢集可謂是讓很多人久等了。 Redis 叢集是一組能進行資料共享的Redis 例項(

分散式快取技術redis學習系列(六)——sentinel哨兵機制

一、簡介: 1、Redis 的 Sentinel 系統用於管理多個 Redis 伺服器(instance),該系統執行以下三個任務: 1)監控(Monitoring):Sentinel 會不斷地檢查你的主伺服器和從伺服器是否運作正常。 2)提醒(Notifica

分散式快取Rediscluster叢集

寫在前面      jedis客戶端操作redis主要三種模式:單臺模式、分片模式(ShardedJedis)、叢集模式(BinaryJedisCluster),分片模式是一種輕量級叢集。   單臺模式、分片模式(ShardedJedis)前面已經

分散式快取技術redis學習系列(八)——JedisCluster原始碼解讀:叢集初始化、slot(槽)的分配、值的存取

redis叢集環境,客戶端使用JedisCluster獲取連線並操作redis服務,上一篇 分散式快取技術redis學習系列(七)——spring整合jediscluster 簡單介紹了spring使用JedisCluster,這篇從JedisCluster原始

分散式快取技術redis學習系列(七)——spring整合jediscluster

1、maven依賴 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version

分散式快取技術redis學習系列(九)——Redis主從實現讀寫分離

前言 大家在工作中可能會遇到這樣的需求,即Redis讀寫分離,目的是為了壓力分散化。下面我將為大家介紹藉助AWS的ELB實現讀寫分離,以寫主讀從為例。 實現 引用庫檔案 <!-- redis客戶端 --> <dependency&g

分散式快取技術redis系列(四)——redis高階應用(叢集搭建、叢集分割槽原理、叢集操作)

[[email protected] redis-cluster]# mkdir /usr/local/redis-cluster/7037 && cp /usr/local/redis-cluster/7031/redis.conf /usr/local/redis-cluster

【直播預告】:Java Spring Boot實戰系列課程(第十講):Spring Boot 2.0實戰高併發分散式快取

內容概要:Redis作為開源分散式高併發快取,在網際網路公司高併發系統中廣泛使 用,本次課程講解如何使用最新的Java Spring Data實戰Redis,以及底層API的實現原始碼。主講人:徐雷(阿里雲棲特邀Java專家)直播時間:2019年1月1日 週二 今晚20:00直播地點:【阿里Java技術進階】

Java Spring Boot 2.0實戰Redis分散式快取與底層API架構

《阿里巴巴Java Spring Boot 2.0開發實戰課程》10課 本期分享專家:徐雷—阿里巴巴雲棲Java講師,MongoDB講師 本期分享主題:Java Spring Boot 2.0實戰Redis分散式快取與底層API架構(面試題) 內容概要:Redis分散式高併發快取,高併發架構的必備技術!

【開源專案系列】如何基於 Spring Cache 實現多級快取(同時整合本地快取 Ehcache 和分散式快取 Redis

## 一、快取 當系統的併發量上來了,如果我們頻繁地去訪問資料庫,那麼會使資料庫的壓力不斷增大,在高峰時甚至可以出現數據庫崩潰的現象。所以一般我們會使用快取來解決這個資料庫併發訪問問題,使用者訪問進來,會先從快取裡查詢,如果存在則返回,如果不存在再從資料庫裡查詢,最後新增到快取裡,然後返回給使用者,當然了,接

Redis系列--2Redis配置

redis配置詳解1、Redis配置在Redis有配置文件(redis.conf)可在Redis的根目錄下找到。可以通過Redis的CONFIG命令設置所有Redis的配置。2、配置文件說明:1. Redis默認不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程 daemonize

Ngnix技術研究系列2-基於Redis實現動態路由

spa esp text 應用 list cached cap postman blank 上篇博文我們寫了個引子: Ngnix技術研究系列1-通過應用場景看Nginx的反向代理 發現了新大陸,OpenResty OpenResty 是一個基於 Nginx 與 Lua