什么是Redis的数据分片?

Redis的数据分片(sharding)是一种将一个Redis数据集分割成多个部分,分别存诸在不同的Redis节点上的技术。它可以用于将一个单独的Redis数据库扩展到多个物理机器上,从而提高Redis集群的性能和可扩展性


Redis数据分片的实现方式通常是将数据按照某种规则(例如,key的hash值)分配到不同的节点上。当客户端想要访问某个key时,它会先计算出这个key应该存储在哪个节点上,然后直接连接到该节点进行操作。因此,对于客户端而言,Redis集群就像是一个大型的、统一的数据库,而不需要关心数据的实际分布情况。

在Redis的Cluster 集群模式中,使用哈希槽(hash slot)的方式来进行数据分片,将整个数据集划分为多个槽,每个分配给一个节点。客户端访问数据时,先计算出数据对应的槽,然后直接连接到该槽所在的节点进行操作。Redis Cluster还提供了自动故障转移、数据迁移和扩缩容等功能,能够比较方便地管理一个大规模的Redis集群。

Redis Cluster将整个数据集划分为16384个槽,每个都有一个编号(0~16383),集群的每个节点可以负责多个hash槽,客户端访问数据时,先根据key计算出对应的槽编号,然后根据槽编号找到负责该槽的节点,向该节点发送请求。


在 Redis 的每一个节点上,都有这么两个东西,一个是槽(slot),它的的取值范围是:0-16383。还有一个就是 cluster,可以理解为是一个集群管理的插件。当我们的存取的 Key 的时候,Redis 会根据 CRC16 算法得出一个结果,然后把结果对16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

Redis Cluster中的数据分片具有以下特定:

1.提升性能和吞吐量:通过在多个节点上分散数据,可以并行处理更多的操作,从而提升整体的性能和吞吐量。这在高流量场景下尤其重要,因为单个节点可能无法处理所有请求。
2.提高可扩展性:分片使得Redis可以水平扩展,可以通过添加更多节点扩展数据库的容量和处理能力。
3.更好的资源利用:分片允许更有效地利用服务器资源。每个节点只处理数据的一部分,这降低了单个节点的内存和计算需求。
4.避免单点故障:在没有分片的情况下,如果唯一的Redis服务器发生故障,整个服务可能会停止。在分片的环境中,即使一个节点出现问题,其他节点仍然可以继续运行。
5.数据冗余和高可用性:在某些分片策略中,如Redis集群,每个分片的数据都可以在集群内的其他节点上进行复制。这意味着即使一个节点失败,数据也不会丢失,从而提高了系统的可用性。

 

扩展:

16384

Redis Cluster将整个数据集划分为16384 个槽,为什么是16384 呢,这个数字有什么特别的呢?

16384这个数字是一个2的14次方(2^14),尽管crc16能得到2^16-1=65535个值,但是并没有选择,主要从消息大小和集群规模等方面考虑的:
1、正常的心跳数据包携带了节点的完整配置,在更新配置的时候,可以以冩等方式进行替换。这意味着它们包含了节点的原始槽配置,对于包含16384个槽位的情况使用2k的空间就够了,但如果使用65535个槽位,则需要使用8k的空间,这就有点浪费了。
2、由于其他设计权衡的原因,Redis Cluster不太可能扩展到超过1000个主节点这种情况下,用65535的话会让每个节点上面的slot太多了,会导致节点的负载重并目数据迁移成本也比较高。而16384是相对比较好的选择,可以在1000个节点下使得slot均匀分布,每个分片平均分到的slot不至于太小。

除此之外,还有一些原因和优点供大家参考:

1.易于扩展:槽数量是一个固定的常数,这样就可以方便地进行集群的扩展和缩小。如果需要添加或删除节点,只需要将槽重新分配即可

2.易于计算:哈希算法通常是基于槽编号计算的,将槽数量设置为2的幂次方,可以使用位运算等简单的算法来计算槽编号,从而提高计算效率。


3.负载均衡:槽数量的选择可以影响数据的负载均衡。如果数量太少,会导致某些节点负载过重;如果槽数量太多,会导致数据迁移的开销过大。16384这个数量在实践中被证明是一个比较合适的选择,能够在保证负载均衡的同时减少数据迁移的开销。

CRC16算法

当我们的存取的 Key 的时候,Redis 会根据 CRC16 算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽。
那么,什么是CRC16算法呢?


CRC16(Cyclic Redundancy Check,循环冗余校验码)算法是一种广泛使用的校验算法,主要用于数据通信和数据存储等领域,例如网络通信中的错误检测和校正、数据存储中的文件校验和等。
CRC16算法基于多项式除法,将输入数据按位进行多项式除法运算,最后得到一个16位的校验码。CRC16算法的计算过程包括以下几个步骤:
1.初始化一个16位的寄存器为全1:
2.将输入数据的第一个字节与16位寄存器的低8位进行异或操作,结果作为新的16位寄存器的值;
3.将16位寄存器的高8位和低8位分别右移一位,丢弃掉最低位,即寄存器右移一应
4.如果输入数据还没有处理完,转到第2步继续处理下一个字节:5.如果输入数据已经处理完,将16位寄存器的值取反,得到CRC16校验码。


CRC16算法的多项式是一个固定的16位二进制数,不同的CRC16算法使用的多项式也不相同。例如,CRC-16/CCITT算法使用的多项式为0x1021,而ModbusCRC16算法使用的多项式为0xA001。


CRC16算法的优点是计算速度快,校验效果好,具有广泛的应用范围。缺点是只能检测错误,无法纠正错误。如果数据被修改,CRC校验值也会被修改,但无法确定是哪一位数据被修改。因此,在数据传输和存储中,通常需要与其它校验算法配合使用,以保证数据的完整性和正确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独家直播!手机无人APP,让你跟上最新潮流

手机无人APP,是一款极具创新力和前瞻性的应用,旨在让用户随时随地跟上最新潮流。通过独家直播功能,用户可以第一时间了解世界各地的潮流资讯,与时俱进,展现出自己的个性和风采。 无人APP的直播功能实现了信息的即时传…

工业涂装行业的物联网解决方案

工业涂装行业的物联网解决方案 工业涂装行业在制造业中占据重要地位,其产品质量直接影响到最终产品的外观和性能。然而,传统涂装生产线容易出现质量问题,如色差、光泽度不均、橘皮现象等。为了解决这些问题,工业涂装行业需要寻求…

String 底层为什么使用 final 修饰?

1、典型回答 对于这个问题,Java之父詹姆斯 高斯林(James Gosling) 是这样回答的: I would use an immutable whenever I can 翻译为中文:只要允许,我就会使用不可变对象 而作为普通人的我们来说&#xff0…

算法---双指针练习-8(四数之和)

四数之和 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址:四数之和 2. 讲解算法原理 首先对输入的数组进行排序,以便后续使用双指针法。初始化一个空的二维向量 ret,用于存储结果。对数组中的每个元素 nums[i] 进行遍历&#…

mysql主键和外键的区别

mysql主键和外键的区别 一、主键与外键存在的意义 主键和外键在关系数据库中扮演着至关重要的角色,它们共同维护着数据的完整性和一致性。 主键:它是每条记录的唯一标识符,犹如人的身份证号码,具有唯一性和非空性。例如&#x…

Linux基础命令[15]-less

文章目录 1. less 命令说明2. less 命令语法3. less 命令示例3.1 不加参数3.2 -N(显示行号)3.3 打开多个文件3.4 标记导航3.5 搜索内容 4. 总结 1. less 命令说明 less:用来分页查看文件,与 more 相比更加的灵活,并且…

算法之二分查找算法

二分查找算法简介 1. 首先说明二分查找算法是比较恶心, 细节很多, 很容易写出死循环的算法, 但熟悉了之后是最简单的算法. 2. 其次我们可能听说过二分查找的前提是数组有序的前提下进行, 但其实不一定. 3. 二分查找算法有一套模板: 朴素的二分模板: 比较简单, 但是有局限性查找…

docker——启动各种服务

1.Mysql 2.Redis 3.nginx 4.ES 注意:ES7之后环境为 -e ELASTICSEARCH_HOSTS http://ip地址:9200

【libwebrtc】基于m114的构建

libwebrtc A C++ wrapper for binary release, mainly used for flutter-webrtc desktop (windows, linux, embedded).是 基于m114版本的webrtc 最新(20240309 ) 的是m122了。官方给出的构建过程 .gclient 文件 solutions = [{"name" : src,"url

用信号的方式回收僵尸进程

当子进程退出后,会给父进程发送一个17号SIGCHLD信号,父进程接收到17号信号后,进入信号处理函数调用waitpid函数回收僵尸进程若多个子进程同时退出后,这是切回到父进程,此时父进程只会处理一个17号信号,其他…

植物病害识别:YOLO水稻病害识别/分类数据集(2000多张,2个类别,yolo标注)

YOLO水稻病害识别/分类数据集,包含疾病和正常2类,共2000多张图像,yolo标注完整,可直接训练。 适用于CV项目,毕设,科研,实验等 需要此数据集或其他任何数据集请私信

解决input事件监听拼音输入法导致高频事件

1、业务场景 在文本框中输入内容,执行查询接口,但遇到一个问题,当用拼音打字写汉字去搜索的时候,会输入一些字母拼成汉字,怎么能监听等拼音文字输入完成后再触发文本框监听事件 2、解决方案 通过查阅资料得知在输入中…

算法学习11:树与图的 DFS、BFS

算法学习11:树与图的 DFS、BFS 文章目录 算法学习11:树与图的 DFS、BFS前言一、树与图的深度优先遍历1.例题:树的重心: 二、树与图的宽度优先遍历1.例题:图中点的层次: 三、拓扑排序:&#xff0…

vue.js 页面中设置多个swiper

效果&#xff1a; 设置主要设置了 动态的 包含类、 左右按钮的类 <template><div class"swiper-container_other"><!-- 右侧按钮 --><div :class"[(id)?swiper-button-nextid:swiper-button-next, swiper-button-next]"></div…

浅易理解:卷积神经网络(CNN)

浅易理解卷积神经网络流程 本文的目录&#xff1a; 1 什么卷积神经网络 2 输入层 3 卷积层 4 池化层 5 全连接层 1 什么是卷积神经网络 1.1卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09; 是一种前馈神经网络&#xff0c;它的人工神经元可以响应一…

golang中new和make的区别

1. 先看一个例子 package mainimport "fmt"func main() {var a *int*a 10fmt.Println(*a) }运行结果是啥呢&#xff1f; 问&#xff1a;为什么会报这个panic呢&#xff1f; 答&#xff1a;因为如果是一个引用类型&#xff0c;我们不仅要声明它&#xff0c;还要为…

Linux命令-权限管控

Linux命令-权限管控 目录 Linux命令-权限管控rootsu&#xff08;switch user&#xff09;sudo用户、用户组查看权限管控信息修改权限控制chmodchown 对于Linux中权限的讲解以及对权限的一些操作 root 超级管理员&#xff0c;拥有最大系统操作权限普通用户一般在其HOME目录内是…

Leetcode 675 为高尔夫比赛砍树

文章目录 1. 题目描述2. 我的尝试3. 题解1. BFS 1. 题目描述 Leetcode 675 为高尔夫比赛砍树 2. 我的尝试 typedef priority_queue<int, vector<int>, greater<int>> heap;class Solution { public:int m;int n;int bfs(vector<vector<int>>&…

2024中国(京津冀)太阳能光伏推进大会暨展览会

2024年中国(京津冀)太阳能光伏推进大会暨展览会是一个旨在促进太阳能光伏产业发展的重要会议和展览会。该活动将在中国的京津冀地区举行&#xff0c;旨在汇聚全球太阳能光伏领域的专业人士、政府代表、企业家和科研人员&#xff0c;共同探讨太阳能光伏技术的最新进展和未来发展…

数据集成工具 ---- datax 3.0

1、datax: 是一个异构数据源离线同步工具&#xff0c;致力于实现关系型数据库&#xff08;mysql、oracle等&#xff09;hdfs、hive、hbase等各种异构数据源之间的数据同步 2、参考网址文献&#xff1a; https://github.com/alibaba/DataX/blob/master/introduction.md 3、Da…