Redis集羣學習筆記

Redis集羣學習筆記

前言

最近有個需求,就是將一個Redis集羣中數據轉移到某個單機Redis上。html

遷移Redis數據的話,若是是單機Redis,有兩種方式:
a. 執行redis-cli shutdown命令,觸發寫RDBAOF寫磁盤操做,而後將RDB文件和AOF文件都拷貝到新服務器上,而後運行服務器便可。
b. 若是不想暫停服務,能夠用工具,好比Redis Dump;也能夠採用Redis提供的Master Slave方式同步數據。redis

可是,若是是Redis集羣的話,每一個Redis實例上面只有部份數據,這就不太好辦了。所以,有必要學習Redis集羣的相關知識。數據庫

基礎知識 - 分片

爲何Redis須要分片?Redis分片能夠服務器

  1. 分片後,數據庫容量不受單機內存容量限制
  2. 分片能利用多核、多服務器,提升計算能力(一個Redis服務是單線程的)
  3. 分片後,單機網絡帶寬壓力減小。

爲何選擇哈希分片(hash partitioning)?網絡

最簡單的分片方式是範圍分片,不過範圍分片要維護一個映射範圍到實例的表,這種方式效率低。ide

 例如:若是咱們的數據是user 的形式,咱們能夠把user<0>到user<1000>的數據存到1號Redis實例,把user<10001>到user<20000>存到2號Redis實例,依此類推。但若是咱們還有post , , 等各類不一樣類型的鍵,咱們須要爲每一種類型定義一個映射範圍表。這個比較麻煩。 工具

採用哈希分片就沒有這個問題。因爲Redis自身是一個Key-Value數據庫,能夠直接對key這個字符串計算hash,獲得一個數字,而後對數字取模(模爲redis實例數目)。post

例如:咱們對user<2019>這個鍵計算哈希獲得數字9527520,假設咱們有7個Redis實例,9527520 % 7 = 2,咱們就能知道這個數據存放在2號Redis實例中。學習

分片的不一樣實現ui

  • 客戶端分片(Client side partitioning)意味着,客戶端直接選擇正確的節點來寫入和讀取指定鍵。許多 Redis 客戶端實現了客戶端分片。
  • 代理協助分片(Proxy assisted partitioning)意味着,咱們的客戶端發送請求到一個能夠理解 Redis 協議的代理上,而不是直接發送請求到 Redis 實例上。代理會根據配置好的分片模式,來保證轉發咱們的請求到正確的 Redis 實例,並返回響應給客戶端。Redis 和 Memcached 的代理 Twemproxy 實現了代理協助的分片。
  • 查詢路由(Query routing)意味着,你能夠發送你的查詢到一個隨機實例,這個實例會保證轉發你的查詢到正確的節點。Redis 集羣在客戶端的幫助下,實現了查詢路由的一種混合形式 (請求不是直接從 Redis 實例轉發到另外一個,而是客戶端收到重定向到正確的節點)。下面所說的Redis Cluster就是採用查詢路由的方式。

Redis官方提供的集羣實現:Redis Cluster

從 Redis 3.0 開始,Redis提供了一個官方集羣實現:Redis Cluster。

上面這兩個文檔足夠了,下面是個人一些理解。

新增或刪除結點

RedisCluster經過哈希槽移動、哈希槽百分比調整、從新分片(Reshard)等操做完成增刪結點、數據均衡。
這篇博客挺好的,本身動手試試試試能加深理解,CSDN - Redis Cluster增長節點和Reshard

Redis Cluset的主從模型Master-Slave

好比咱們有6個Redis實例,能夠用分別設置A,B,C三臺做爲Redis Cluster的主服務器,而後設置A1,A2,A3做爲從服務器。這樣,當主服務器A宕機後,Redis Cluster會自動將請求重定向到A1服務器。

必定要看的連接

相關文章
相關標籤/搜索