Redis集群原理詳細(xì)分析
一致性哈希
節(jié)點(diǎn)的增加和減少,大部分節(jié)點(diǎn)的 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é)點(diǎn) 找到具體的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 集群
每個(gè)單機(jī)版本redis 有 standalone_database, 在其上在封裝一個(gè) cluster_database ,cluster_database 主要的功能是進(jìn)行 集群之間的通信。
當(dāng)某個(gè)節(jié)點(diǎn)被推選出 主節(jié)點(diǎn)后,需要將信息轉(zhuǎn)發(fā)給其副的節(jié)點(diǎn),在轉(zhuǎn)發(fā)的過程中涉及到cluster的池化

go-commons-pool比較好使用的go的池化工具
各種命令方式
ping 不需要轉(zhuǎn)發(fā)
get/set 通過一致性hash 轉(zhuǎn)發(fā)到其他節(jié)點(diǎn)
flushdb: 全發(fā)方式 所有節(jié)點(diǎn)數(shù)據(jù)清空
到此這篇關(guān)于Redis集群原理詳細(xì)分析的文章就介紹到這了,更多相關(guān)Redis集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java編程中拷貝數(shù)組的方式及相關(guān)問題分析
這篇文章主要介紹了java編程中拷貝數(shù)組的方式及相關(guān)問題分析,分享了Java中數(shù)組復(fù)制的四種方式,其次對(duì)二維數(shù)組的簡(jiǎn)單使用有一段代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
基于SpringAop中JoinPoint對(duì)象的使用說明
這篇文章主要介紹了基于SpringAop中JoinPoint對(duì)象的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
JAVA?Springboot配置i18n國(guó)際化語言詳細(xì)步驟
國(guó)際化(Internationalization,縮寫為i18n)是指根據(jù)來展示不同的內(nèi)容,使應(yīng)用程序能夠適應(yīng)不同的語言和文化習(xí)慣,下面這篇文章主要給大家介紹了關(guān)于JAVA?Springboot配置i18n國(guó)際化語言的詳細(xì)步驟,需要的朋友可以參考下2024-08-08
Mybatis調(diào)用Oracle存儲(chǔ)過程的方法圖文詳解
這篇文章主要介紹了Mybatis調(diào)用Oracle存儲(chǔ)過程的方法介紹,需要的朋友可以參考下2017-09-09
SpringBoot項(xiàng)目整合mybatis的方法步驟與實(shí)例
今天小編就為大家分享一篇關(guān)于SpringBoot項(xiàng)目整合mybatis的方法步驟與實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
SpringBoot中Get請(qǐng)求和POST請(qǐng)求接收參數(shù)示例詳解
文章詳細(xì)介紹了SpringBoot中Get請(qǐng)求和POST請(qǐng)求的參數(shù)接收方式,包括方法形參接收參數(shù)、實(shí)體類接收參數(shù)、HttpServletRequest接收參數(shù)、@PathVariable接收參數(shù)、數(shù)組參數(shù)接收、集合參數(shù)接收、Map接收參數(shù)以及通過@RequestBody接收J(rèn)SON格式的參數(shù),感興趣的朋友一起看看吧2024-12-12
linux系統(tǒng)下java項(xiàng)目在后臺(tái)啟動(dòng)的4種方式總結(jié)
Linux是集多種功能于一身的操作系統(tǒng),它可以讓用戶查看和管理當(dāng)下正在運(yùn)行的進(jìn)程,包括Java程序,這篇文章主要給大家總結(jié)介紹了關(guān)于linux系統(tǒng)下java項(xiàng)目在后臺(tái)啟動(dòng)的4種方式,需要的朋友可以參考下2023-10-10

