redis的原理(四)

简介: redis的原理(四)

1、分布式数据存储的核心算法,数据分布的算法

①、redis cluster

a、自动将数据进行分片,每个master上放一部分数据

b、提供内置的高可用支持,部分master不可用时,还是可以继续工作的,在redis cluster架构下,每个redis要放开两个端口号,比如一个是6379,另外一个就是加10000的端口号,比如16379,16379端口号是用来进行节点间通信的,也就是cluster bus的东西,集群总线。cluster bus的通信,用来进行故障检测,配置更新,故障转移授权,cluster bus用了另外一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间。

2、最老土的hash算法和弊端(大量缓存重建)

在整个设计当中:集群的主从是由随机的去选择的,由脚本里面最近的节点ip段来主从划分选的,缺点:比如突然第二台挂掉:会影响整个的缓存都会不可用了,因为是按照%来取的,这是hash方式最老土的。

3、一致性hash算法(自动缓存迁移)+虚拟节点(自动负载均衡)

比如有三个master.,通过hash算法,来把key放入到不同的位置,hash算法有很多,这时如果节点没有直接落到2上,而是落到下面的位置,这时会有一个顺时针的旋转然后它就会落到2的位置。现在如果即使第三个master挂掉的话,数据不会全部无效。如果下次的key落到3的附近,发现第三个master挂了,无效的,它会继续旋转找到第一个。

但是这时会有热点数据的问题,可能某一个时刻,发现2里面的数据存的很多, 而1的里面没有数据

这时redis搞了一个虚拟节点。虚拟节点去生成1的节点的快捷方式,类似于快速

这时就给它均匀分布,这时就不会导致所有的key落在一个节点上,这时会根据虚拟节点找到真实节点去进行存储了。这就不会出现热点数据堆积的问题。这就不会导致主从的结构的数据完全失效。

4、redis cluster的hash slot算法

①、redis cluster有固定的16384个hash slot,对每个key计算CRC16值,然后对16384取模,可以获取key对应的hash slot,redis cluster中每个master都会持有部分slot,比如有3个master,那么可能每个master持有5000多个hash slot。hash slot让node的增加和移除很简单,增加一个master,就将其他master的hash slot移动部分过去,减少一个master,就将它的hash slot移动到其他master上去,移动hash slot的成本是非常低的。

②、hash环和hash slot是一样的道理,三个master把hash槽分成了三个部分。下面的hash slot是有很多的槽,我这里只是简单的画下


③、这里还有一个机制:就是故障转移机制,如果槽所在的master挂掉了,会实现槽的转移,这就是redis集群能够做到高可用和故障转移的原理。这个比hash环设计的好一些,并且做到了槽的转移。槽的转移是很快速的,因为在一个集群中。一般 的槽是连续的,不是断开的。槽的分配尽量是均匀的。这里不会有热点的问题。因为一个master有5000个槽。

相关文章
|
JSON NoSQL Redis
|
10小时前
|
缓存 NoSQL Linux
redis的原理(三)
redis的原理(三)
redis的原理(三)
|
3月前
|
SQL NoSQL Redis
|
4月前
|
存储 NoSQL 关系型数据库
Redis基础1
Redis基础
30 0
|
4月前
|
存储 NoSQL Java
Redis基础2
Redis基础
26 0
|
4月前
|
存储 消息中间件 缓存
redis
Redis是一个开源的内存数据库,它可以用作缓存、消息队列和持久化存储等多种用途。
54 0
|
消息中间件 存储 负载均衡
|
NoSQL 关系型数据库 MySQL
Redis1
Redis1
68 0
|
存储 缓存 NoSQL
Redis初探
本篇深入介绍了Redis(Remote Dictionary Server)这一开源的内存数据存储系统,以及它在现代应用开发中的用途和优势。首先,我们对Redis进行了初步探索,解释了Redis是什么,它的主要特点以及适用场景。接着,我们详细讨论了Redis的安装和配置过程,提供了在Linux环境下安装Redis的步骤,并展示了如何启动和关闭Redis服务器。
218 0
|
存储 NoSQL 算法
【Redis 系列】redis 学习五,多学习一些 redis 的三种特殊数据类型
【Redis 系列】redis 学习五,多学习一些 redis 的三种特殊数据类型