iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Redis集群原理详细分析
  • 765
分享到

Redis集群原理详细分析

Redis集群Redis集群原理Redis集群模式 2022-12-19 12:12:25 765人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一致性哈希Redis 集群一致性哈希 节点的增加和减少,大部分节点的 Hash一致 package consistenthash import ( "hash/crc32"

一致性哈希

节点的增加和减少,大部分节点的 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 // 通过节点 找到具体的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 主要的功能是进行 集群之间的通信。

当某个节点被推选出 主节点后,需要将信息转发给其副的节点,在转发的过程中涉及到cluster的池化

Go-commons-pool比较好使用的go的池化工具

各种命令方式

ping 不需要转发

get/set 通过一致性hash 转发到其他节点

flushdb: 全发方式 所有节点数据清空

到此这篇关于Redis集群原理详细分析的文章就介绍到这了,更多相关Redis集群内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Redis集群原理详细分析

本文链接: https://www.lsjlt.com/news/175245.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作