Redis 集羣(三)

爲什麼爲有集羣

  • 在 Redis3 版本之前,每臺 Redis 機器需要存儲所有 Redis key ,這要求每臺 Redis 機器有足夠大的內存
  • 而且只能是主節點寫,從節點讀,對於高併發情況下會有性能瓶頸
  • 雖然有哨兵模式來保證服務的高用,但是切換主節點還是需要時間的(實測)

分佈式數據庫

分佈式數據庫指將數據均勻的分佈到每個節點上,可以做數據冗餘來排除故障,每個節點負責數據的一個子集

如何進行分區

常見的分區規則 哈希分區順序分區,Redis 集羣使用了哈希分區 虛擬槽分區 方式

所有的鍵根據哈希函數 (CRC16[key]&16383) 映射到0-16383槽內,共16384個槽位,每個節點維護部分槽及槽所映射的鍵值數據

哈希函數: Hash()=CRC16[key]&16383 按位與

Redis用虛擬槽分區原因:解耦數據與節點關係,節點自身維護槽映射關係,分佈式存儲

Redis集羣的不足

  • 鍵的批量操作支持有限,比如mset, mget,如果多個鍵映射在不同的槽,就不支持了
  • 鍵事務支持有限,當多個key分佈在不同節點時無法使用事務,同一節點是支持事務
  • 鍵是數據分區的最小粒度,不能將一個很大的鍵值對映射到不同的節點
  • 不支持多數據庫,只支持 0 數據庫
  • 主從結構只支持單層結構,不支持樹型結構
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章