Redis集群原理詳細分析
一致性哈希
節(jié)點的增加和減少,大部分節(jié)點的 Hash一致
package consistenthash import ( "hash/crc32" "sort" ) // HashFunc defines function to generate hash code type HashFunc func(data []byte) uint32 // NodeMap consistent hash hashFunc and you can pick node form NodeMap type NodeMap struct { hashFUnc HashFunc nodeHashs []int // sorted nodehashMap map[int]string // 通過節(jié)點 找到具體的hash 值 } func NewNodeMap(fn HashFunc) *NodeMap { nodeMap := &NodeMap{ hashFUnc: fn, nodehashMap: make(map[int]string), } // default func if nodeMap.hashFUnc == nil { nodeMap.hashFUnc = crc32.ChecksumIEEE } return nodeMap } func (m *NodeMap) IsEmpty() bool { return len(m.nodeHashs) == 0 } func (m *NodeMap) AddNode(keys ...string) { for _, key := range keys { if key == "" { continue } hash := int(m.hashFUnc([]byte(key))) m.nodeHashs = append(m.nodeHashs, hash) m.nodehashMap[hash] = key } sort.Ints(m.nodeHashs) } func (m *NodeMap) PickNode(key string) string { if m.IsEmpty() { return "" } hash := int(m.hashFUnc([]byte(key))) // Binary Search sorted hash idx := sort.Search(len(m.nodeHashs), func(i int) bool { return m.nodeHashs[i] >= hash }) if idx == len(m.nodeHashs) { idx = 0 } return m.nodehashMap[m.nodeHashs[idx]] }
Redis 集群
每個單機版本redis 有 standalone_database, 在其上在封裝一個 cluster_database ,cluster_database 主要的功能是進行 集群之間的通信。
當(dāng)某個節(jié)點被推選出 主節(jié)點后,需要將信息轉(zhuǎn)發(fā)給其副的節(jié)點,在轉(zhuǎn)發(fā)的過程中涉及到cluster的池化
go-commons-pool比較好使用的go的池化工具
各種命令方式
ping 不需要轉(zhuǎn)發(fā)
get/set 通過一致性hash 轉(zhuǎn)發(fā)到其他節(jié)點
flushdb: 全發(fā)方式 所有節(jié)點數(shù)據(jù)清空
到此這篇關(guān)于Redis集群原理詳細分析的文章就介紹到這了,更多相關(guān)Redis集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea中使用maven?archetype新建項目時卡住問題解決方案
這篇文章主要介紹了idea中使用maven?archetype新建項目時卡住,解決本問題的方法,就是在maven的runner加上參數(shù)-DarchetypeCatalog=local就可以了,不需要下載xml文件再放到指定目錄,需要的朋友可以參考下2023-08-08springboot實現(xiàn)定時任務(wù)@Scheduled方式
這篇文章主要介紹了springboot實現(xiàn)定時任務(wù)@Scheduled方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別
這篇文章主要介紹了java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別的相關(guān)資料,本文主要說明兩者的區(qū)別以防大家混淆概念,需要的朋友可以參考下2017-08-08