為什麼為有集群 在 Redis3 版本之前,每台 Redis 機器需要存儲所有 Redis key ,這要求每台 Redis 機器有足夠大的記憶體 而且只能是主節點寫,從節點讀,對於高併發情況下會有性能瓶頸 雖然有哨兵模式來保證服務的高用,但是切換主節點還是需要時間的(實測) 分散式資料庫 分散式數據 ...
為什麼為有集群
- 在 Redis3 版本之前,每台 Redis 機器需要存儲所有 Redis key ,這要求每台 Redis 機器有足夠大的記憶體
- 而且只能是主節點寫,從節點讀,對於高併發情況下會有性能瓶頸
- 雖然有哨兵模式來保證服務的高用,但是切換主節點還是需要時間的(實測)
分散式資料庫
分散式資料庫指將數據均勻的分佈到每個節點上,可以做數據冗餘來排除故障,每個節點負責數據的一個子集
如何進行分區
常見的分區規則 哈希分區,順序分區,Redis 集群使用了哈希分區 虛擬槽分區 方式
所有的鍵根據哈希函數 (CRC16[key]&16383) 映射到0-16383槽內,共16384個槽位,每個節點維護部分槽及槽所映射的鍵值數據
哈希函數: Hash()=CRC16[key]&16383 按位與
Redis用虛擬槽分區原因:解耦數據與節點關係,節點自身維護槽映射關係,分散式存儲
Redis集群的不足
- 鍵的批量操作支持有限,比如mset, mget,如果多個鍵映射在不同的槽,就不支持了
- 鍵事務支持有限,當多個key分佈在不同節點時無法使用事務,同一節點是支持事務
- 鍵是數據分區的最小粒度,不能將一個很大的鍵值對映射到不同的節點
- 不支持多資料庫,只支持 0 資料庫
- 主從結構只支持單層結構,不支持樹型結構
搭建集群
參考我的另一篇文章 https://blog.csdn.net/sanri1993/article/details/101720686
一點小推廣
創作不易,希望可以支持下我的開源軟體,及我的小工具,歡迎來 gitee 點星,fork ,提 bug 。
Excel 通用導入導出,支持 Excel 公式
博客地址:https://blog.csdn.net/sanri1993/article/details/100601578
gitee:https://gitee.com/sanri/sanri-excel-poi
使用模板代碼 ,從資料庫生成代碼 ,及一些項目中經常可以用到的小工具
博客地址:https://blog.csdn.net/sanri1993/article/details/98664034
gitee:https://gitee.com/sanri/sanri-tools-maven