Redis集群分片

什么是集群

集群是由多个复制集组成的,能提供在多个redis节点间共享数据的程序集

简而言之就是将原来的单master主机拆分为多个master主机,将整个数据集分配到各主机上

集群的作用

  1. 集群中可以存在多个master,而每个master可以挂载多个slave
  2. 自带哨兵的故障转移机制,不需要再去使用哨兵功能
  3. 连接集群中的一个可用节点就可以访问整个集群

ps:集群不保证数据的强一致性,会因为网络等原因丢数据

集群算法

数据分片

redis会根据节点的数量将哈希槽分为若干段,每一段分配给若干个redis实例,这个redis实例就是分片

哈希槽:以前每一个key是直接存放在键空间里面的,现在我们在此之上多套了一层数据结构,将键空间划分成多个哈希槽,再将数据存放在哈希槽中

如何找到给定key的分片?

答:使用CRC16(KEY)算法对key进行处理,使用确定性哈希函数对16384(总哈希槽数)进行取模计算出key的对应槽值,根据槽值可以得出对应的分片

使用分片和槽位的优势 

  1. 方便扩缩容和数据分派查找
  2. 扩缩容不会导致集群不可用
  3. 不会出现数据倾斜的问题

扩展--slot槽位映射的3种方案

哈希取余分区

优点是简单有效,缺点是当redis服务器需要扩缩容时会导致节点映射关系的改变,如果其中一台主机出现宕机了全部数据hash都会被打乱

一致性哈希算法分区

一致性哈希算法将整个哈希值空间组织成一个虚拟的圆环,圆环的范围是[0,2^32-1]

所有哈希值都会落到圆环上,再将redis节点映射到某一点上,当数据映射到圆环时会顺时针寻找第一个被找到的redis节点,将数据存放在该节点上

优点是可以扩展,影响的节点少,缺点是节点映射的位置可能会导致数据存放不均匀

哈希槽分区

哈希槽分区也就是我们redis集群采用的算法,在数据和节点之间多加了一层槽

槽解决的是粒度问题,把粒度变大了,便于数据移动;哈希解决的是映射问题,使用key的哈希值来计算所在的槽,便于数据分配

为什么redis集群的槽位是16384个?

出于心跳包消息头,节点数量,压缩比三个方面去考虑

集群配置和使用

集群的配置可以去b站上看视频,网上都有就不浪费时间了,这里说一下一些需要注意的点

  1. 集群的主从复制不需要配文件,通过命令进行主从复制,且执行的结果具有随机性
  2. 客户端连接时需要加-c选项,否则无法跨节点进行写操作
  3. 当一个主机宕机后,其从机会自动上位,且原主机恢复后自动成为从机
  4. 集群在扩容时,是从现有的节点中均匀分配出一些槽位共同分配给新节点
  5. 集群在缩容时,是由其中一个节点完全接收节点释放出来的槽位

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

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

相关文章

整型提升和算术转换<C语言>

前言 在C语言中进行整数运算时,我们通常把操作数设置为int型变量,按照整数的精度计算,如果是非int型的整数进行计算时,会有那些变化呢? 整型提升 关于整型提升的情况,通常发生在char型和short int型中&…

算法学习(6)-最短路径

目录 Floyd-Warshall算法 Dijkstra算法 Bellman-Ford算法 Bellman-Ford的队列优化 最短路径算法对比分析 Floyd-Warshall算法 现在回到问题:如何求任意两点之间的最短路径呢? 通过之前的学习, 我们知道通过深度或广度优先搜索可以求出两…

深度剖析muduo网络库1.1---面试提问(阻塞、非阻塞、同步、异步)

在面试过程中,如果被问到关于IO的阻塞、非阻塞、同步、异步时,我们应该如何回答呢? 结合最近学习的课程,我作出了以下的总结,希望能与大家共同探讨! 先给出 陈硕大神原话:在处理IO的时候&…

水面垃圾清理机器人的视觉算法研究

卷积神经网络是一种分层的数据表示模型,通常由数据输入层、卷积层、池化层、 非线性激活函数、全连接层以及输出结果预测层等组成,其中卷积层、池化层和非线 性激活函数是卷积神经网络中的重要组成部分。此外,有些模型会增加其他的层(归一 化…

C++贪心算法

关于string的系统函数! (注:以下函数只可用于string,不适用其他类型的变量) ① a.size(); 这个系统函数是用来获取这个string变量的长度的,我们通常会新建一个变量来保存他,以便之后使用。 …

linux centos7.9 快速安装python3环境

安装好linux centos7.9 默认只有python2的环境如下: python2.7.5这个很老旧的版本了,有很多新库不支持,性能可能也不行。 接下来快速安装python3环境,并设置源做到快速安装包,设置虚拟环境,打造强大的python实验环境: 1,下载,安装最小化的miniconda,可以通过这个自…

同一局域网如何从Windows系统拷贝文件到银河麒麟系统

1. 先将Windows下的、被拷贝文件所在文件夹设置为共享目录:在文件夹上单击右键选择“属性”菜单,弹出如下对话框: 按数字顺序单击鼠标左键,弹出如下对话框: 并将权限开放为Everyone,单击“共享”按钮。 在…

嵌入式开发八:STM32启动过程分析

本次给大家分析 STM32F4 的启动过程,这里的启动过程是指从 STM32 芯片上电复位执行的第一条指令开始,到执行用户编写的 main 函数这之间的过程。我们编写程序,基本都是用 C 语言编写,并且以 main 函数作为程序的入口。但是事实上&…

腾讯云服务器之ssh远程连接登录

一、创建密钥绑定实例 创建密钥会自动下载一个私钥,把这个私钥复制到c盘 二、设置私钥权限 1、删除所有用户权限 2、添加当前用户权限 查看当前用户名 echo %USERNAME%三、ssh远程连接到服务器 ssh ubuntu175.xxx.xxx.112 -i C:\Crack\cs2.pem四、修改root密码 s…

2024-05-08 问AI: 在深度学习中,介绍一下RMSProp 优化器

文心一言 在深度学习中,RMSProp(Root Mean Square Propagation)优化器是一种常用的优化算法,主要用于神经网络训练的梯度下降算法的变体。它是对Adagrad优化器的一种改进,旨在解决Adagrad中学习率过快下降的问题。 R…

可视化面板布局适配屏幕-基于 flexible.js + rem 智能大屏适配

可视化面板布局适配屏幕-基于 flexible.js rem 智能大屏适配 VScode 安装cssrem插件引入flexible.js在之后的开发都使用rem为单位,安装cssrem插件就是为了快捷将px转为rem我们的设计稿是1920px,设置最小宽度为1024px,最后,我们可…

刷题训练之模拟

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握模拟算法。 > 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。 > 专栏选自:刷题训…