1 分鍾帶你讀懂 Redis 集群的優劣勢,從此技術選型不再坑!


概述

Redis Cluster 是 Redis 原生的數據分片實現,可以自動在多個節點上分布數據,不需要依賴任何外部的工具。

Redis Cluster 中所有 key 會被分派到 16384 個 slot(hash 槽)中,這些 slot 又會被指派到多個 Redis 節點上。

 

一個 key 會映射到某個 slot,算法:

HASH_SLOT = CRC16(key) mod 16384

這個 slot 的機制會給我們帶來一點麻煩,后面會講到。

 

優勢

  1. 高性能
  • Redis Cluster 的性能與單節點部署是同級別的。

  1. 高可用
  • Redis Cluster 支持標准的 master-replica 配置來保障高可用和高可靠。

  • Redis Cluster 也實現了一個類似 Raft 的共識方式,來保障整個集群的可用性。

  1. 易擴展
  • 向 Redis Cluster 中添加新節點,或者移除節點,都是透明的,不需要停機。

  • 水平、垂直方向都非常容易擴展。

  1. 原生
  • 部署 Redis Cluster 不需要其他的代理或者工具,而且 Redis Cluster 和單機 Redis 幾乎完全兼容。

 

限制

  1. 需要客戶端的支持
  • 客戶端需要修改,以便支持 Redis Cluster。

  • 雖然 Redis Cluster 已經發布有幾年時間了,但仍然有些客戶端是不支持的,所以需要到 Redis 官網上去查詢一下。

  1. 只支持一個數據庫
  • 不像單機 Redis,Redis Cluster 只支持一個數據庫(database 0),select 命令就不能用了,但實際也很少有人使用多數據庫,所以這個限制並沒什么影響。

  1. Multi-Key 操作受限

Multi-Key(多 key)是什么意思?某些情況是多 key 的操作,例如:

  • SUNION,這類命令會操作多個 key

  • 事務,會在一個事務中操作多個 key

  • LUA 腳本,也會操作多個 key

這類情況都需要特別注意,因為:Redis Cluster 要求,只有這些 key 都在同一個 slot 時才能執行。例如,有 2 個 key,key1 和 key2。

  • key1 是映射到 5500 這個 slot 上,存儲在 Node A。

  • key2 是映射到 5501 這個 slot 上,存儲在 Node B。

那么就不能對 key1 和 key2 做事務操作。

 

Multi-Key 限制的處理

對於多 key 場景,需要做好數據空間的設計,Redis Cluster 提供了一個 hash tag 的機制,可以讓我們把一組 key 映射到同一個 slot。

例如:user1000.following 這個 key 保存用戶 user1000 關注的用戶;user1000.followers 保存用戶 user1000 的粉絲。

這兩個 key 有一個共同的部分 user1000,可以指定對這個共同的部分做 slot 映射計算,這樣他們就可以在同一個槽中了。

使用方式:

{user1000}.following 和 {user1000}.followers

就是把共同的部分使用 { } 包起來,計算 slot 值時,如果發現了花括號,就會只對其中的部分進行計算。

 

小結

Multi-Key 這一點是 Redis Cluster 對於我們日常使用中最大的限制,一定要注意,如果多 key 不在同一個 slot 中就會報錯,例如:

(error) CROSSSLOT Keys in request don't hash to the same slot

需要使用 hash tag 設計好 key 的空間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM