Redis集群分片

news2025/1/12 10:07:07

什么是集群

集群是由多个复制集组成的,能提供在多个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.coloradmin.cn/o/1654410.html

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

相关文章

华为车BU迈入新阶段,新任CEO对智能车的3个预判

作者 |张马也 编辑 |德新 4月24日,北京车展前夕,华为召开了新一年的智能汽车解决方案新品发布会。 这次发布会,也是华为智能汽车解决方案BU(简称「车BU」)CEO 靳玉志的公开首秀。 一开场,靳玉志即抛出了…

刷题训练之模拟

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

ICode国际青少年编程竞赛- Python-2级训练场-列表入门

ICode国际青少年编程竞赛- Python-2级训练场-列表入门 1、 Dev.step(3)2、 Flyer.step(1) Dev.step(-2)3、 Flyer.step(1) Spaceship.step(7)4、 Flyer.step(5) Dev.turnRight() Dev.step(5) Dev.turnLeft() Dev.step(3) Dev.turnLeft() Dev.step(7) Dev.turnLeft() Dev.…

TMS320F2812DSP最小系统原理图及PCB文件

目录 1、原理图 2、PCB 资料下载地址:TMS320F2812DSP最小系统原理图及PCB文件 1、原理图 2、PCB

Unity数据持久化之Json

Json概述 Json是什么? 全称:JavaScript对象简谱(JavaScript Object Notation) Json是国际通用的一种轻量级的数据交换格式 主要在网络通讯中用于传输数据,或本地数据存储和读取 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 我们一般使用Json文件来…

2024蓝桥杯CTF writeUP--Theorem

密码方向的签到题,根据题目已知n、e和c,并且p和q是相邻的素数,可以考虑分解。 通过prevprime函数分解n,然后 RSA解密即可: from Crypto.Util.number import long_to_bytes import gmpy2 import libnumfrom sympy im…

【linux】进程概念|task_struct|getpid|getppid

目录 ​编辑 1.进程的概念 进程的基本概念 进程与程序的主要区别 进程的特征 进程的状态 描述进程—PCB task_struct中的内容 查看进程 1.创建一个进程,运行以下代码 通过系统调用获取进程标示符 getpid()以及getppid() 1.进程的概念 进程的基本概念…

最常用的AI工具

在日常工作生活中,我试用了几十种AI人工智能工具,下面我来推荐下我最常使用,也是最方便快捷的AI工具。 1百度文心一言 文心一言是一个综合性的大语言模型,整合了很多优秀的提示词,尤其是文心4.0大模型,在中…

《手把手教你怎么上手做一个小程序》

准备工作: 硬件准备: 装有微信的手机一台。 账号注册: 进入https://mp.weixin.qq.com/cgi-bin/registermidpage?actionindex&langzh_CN&token注册一个微信小程序账号。 然后输入邮箱注册账号。一个邮箱只能注册一个微信公众平台…

《Python编程从入门到实践》day22

# 昨日知识点回顾 方法重构、驾驶飞船左右移动、全屏显示 飞船不移动解决,问题出在移动变量x更新 # Ship.pysnipdef update(self):"""根据移动标志调整飞船的位置"""# 更新飞船而不是rect对象的x值# 如果飞船右移的标志和飞船外接…

重定向_缓冲区

目录 重定向 文件属性操作 浅谈重定向​编辑 深入重定向 dup2 缓冲区 缓冲区的理论理解 代码分析 重定向 文件属性操作 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *path, struct stat *buf); int fstat(i…

如何购买阿里云99计划的ECS云服务器?99元购买阿里云2核2G3M服务器教程

阿里云助力中小企业和开发者无忧上云的“99计划”中有两款性价比超高的ECS云服务器&#xff0c;2026年3月31日活动结束前新购和续费价格一样。 其中个人和企业新老用户同享的2核2G3M服务器仅需99元/年&#xff08;续费同价&#xff09;&#xff0c;企业新老用户同学的2核4G5M仅…

鸿蒙OpenHarmony开发板:【子系统配置规则】

子系统 子系统配置规则 通过build仓下的subsystem_config.json可以查看所有子系统的配置规则。 {"arkui": {"path": "foundation/arkui", # 路径"name": "arkui" # 子系统名},"ai": {&q…

单片机-点亮第一盏灯

原理图 需求&#xff1a;点亮或是熄灭LED 通过控制 P5.3引脚输出高电平时&#xff0c;LED灯就点亮&#xff0c;输出低电平时LED灯就熄灭 1.项目创建 新建项目 配置开发板信息 当前位STC芯片的开发板&#xff0c;选择STC MCU Database 搜素具体芯片型号&#xff0c;进行配置…

C# Web控件与数据感应之 TreeView 类

目录 关于 TreeView 一些区别 准备数据源 范例运行环境 一些实用方法 获取数据进行呈现 ​根据ID设置节点 获取所有结点的索引 小结 关于 TreeView 数据感应也即数据捆绑&#xff0c;是一种动态的&#xff0c;Web控件与数据源之间的交互&#xff0c;本文将继续介绍与…

【C++历练之路】STL中的哈希——手搓哈希底层逻辑

W...Y的主页 &#x1f495; 代码仓库分享 &#x1f60a; 前言&#xff1a; "hash"通常指的是哈希&#xff0c;它是一种将数据&#xff08;如字符串或者数字&#xff09;转换为一个固定长度的数值&#xff08;通常是整数&#xff09;的方法。哈希函数能够将任意长度…

背靠腾讯电商的视频号小店项目,怎么去操作呢?新手做店必看!

大家好&#xff0c;我是电商小V 视频号小店作为腾讯电商推出的电商项目&#xff0c;可以说现在就是处于爆火的状态&#xff0c;一直也是备受关注的&#xff0c;同时也是吸引了很多的玩家入驻&#xff0c;因为视频号小店就是一个新的平台&#xff0c;一个新的场地&#xff0c;现…

JAVA队列相关习题4

1. 用队列实现栈。 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 一个队列无法实现栈 尝试使用两个队列 1)push元素的时候应当放在那里&#xff1f;哪个队列不为空就放在哪里 2&#xff09;出栈的时候&#xff0c;出不为空的队列size-1元素&#xff0c;剩余元…

flask框架的初步认识

flask框架的初步认识 这是一个轻量级的网页框架&#xff0c;在运行后&#xff0c;就相当于服务器&#xff0c;当用户输入URL就会触发对应的事件调用方法&#xff0c;返回给用户一个网页文件&#xff0c;并通过自动识别html标签&#xff0c;来为用户呈现对应的样式和效果&#…

第四十节实现主人公的技能释放功能(二)实现技能按钮

看看我们今天要实现的效果是&#xff0c;当我们按下数字1快捷键&#xff0c;我们的技能按钮会进入倒计时&#xff0c;如下图演示&#xff1a; 一、新建场景和根节点设置 新建场景&#xff0c;选择TextureButton作为根节点&#xff0c;重名为SpellButton&#xff0c;保存场景…