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.mfbz.cn/a/604524.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Android】源码解析Activity的结构分析

源码解析Activity的结构分析 目录 1、Activity、View、Window有什么关联?2、Activity的结构构建流程3 源码解析Activity的构成 3.1 Activity的Attach方法3.2 Activity的OnCreate 4、WindowManager与View的关系总结 1、一个Activity对应几个WindowManage&#xff0…

【论文阅读笔记】关于“二进制函数相似性检测”的调研(Security 22)

个人博客链接 注:部分内容参考自GPT生成的内容 [Security 22] 关于”二进制函数相似性检测“的调研(个人阅读笔记) 论文:《How Machine Learning Is Solving the Binary Function Similarity Problem》(Usenix Securi…

C++ 模拟实现 priority_queue(优先队列)

目录 一,优先队列简介 二,priority_queue 的内部实现原理 三,模拟实现 priority_queue 1,模板参数与数据结构 2,构造 3,辅助功能(堆的有序化,建立堆) 4&#xff0…

嵌入式学习69-C++(Opencv)

知识零碎: QT的两种编译模式 1.debug 调试模式 …

springboot整合rabbitmq的不同工作模式详解

前提是已经安装并启动了rabbitmq,并且项目已经引入rabbitmq,完成了配置。 不同模式所需参数不同,生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…

泛微E9开发 选择项目类型,自动带出该类项目的预计金额(即下拉框联动浮点型数据)

1、功能背景 在用户进行项目类型选择时,自动带出其余的标准数据(样例中的预计金额),如对员工进行表彰奖励时,不同的表彰有不同的奖励金额,那么我们就可以使用以下的方式来进行操作。 2、展示效果 3、实现…

WiFine通信与Wi-sun通信对比

调制速率 WiFine通信:(G)FSK 50Kbps~500Kbps ;LoRa 5Kbps~37.5Kbps Wi-Sun通信:(G)FSK 50Kbps~300Kbps ;QPSK/OFDM 计划中… 2、协议简介 WiFine通信:为低成本、低功耗、移动设备倾力打造 的轻量级、分布式无线移动…

英语新概念2-回译法-lesson13

The Greenwood Boys 绿林少年是一组流行歌手们。现在他们正在参观城市里的所有公园,他们明天就要到这。他们将坐火车到并且大多数小镇上的年轻人将要欢迎他们,明天晚上他们将要在工人俱乐部唱歌。绿林少年将在这待五天,在这期间,…

我独自升级崛起加速器推荐 我独自升级免费加速器

近期,《我独自升级》这部动画凭借爆棚的人气,在各大平台上掀起了一阵观看热潮,其影响力不容小觑。借此时机,韩国游戏巨头网石集团敏捷响应,顺势推出了同名游戏《我独自升级:ARISE》,为粉丝们搭建…

如何让vim支持python3

首先删除旧的vim。 sudo apt-get remove vim //输入re按下tab直接显示remove sudo apt-get remove vim-runtime sudo apt-get remove vim -tiny sudo apt-get remove vim-common 然后下载vim8源码: git clone https://github.com/vim/vim.git 进行编译安装…

鸿蒙开发全攻略:华为应用系统如何携手嵌入式技术开启新篇章~

鸿蒙操作系统是华为自主创新的成果,打破了传统操作系统的局限。通过结合嵌入式技术,鸿蒙实现了跨平台、跨设备的高度融合,提供了流畅、智能的体验。华为应用系统与嵌入式技术的结合,提升了性能,丰富了用户体验。鸿蒙与…

【stm-4】PWM驱动LED呼吸灯 PWM驱动舵机PWM驱动直流电机

1.PWM驱动LED呼吸灯 void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); //结构体初始化输出比较单元 void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef*…

RabbitMQ的五种模式

一、简单模式 简单模式(Simple):一个生产者,一个消费者 package com.qiangesoft.rabbitmq.mode.simple;import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.Queue; import org.springframe…

mysql集群cluster引擎在写入数据时报错 (1114, “The table ‘ads‘ is full“)

问题描述:mysql集群在写入数据时,出现上述报错 问题原因:表数据已满,一般是在集群的管理节点设置里面datamemory的值太小,当数据量超过该值时就会出现该问题 解决方案: 修改集群管理节点的config.ini里面…

JUC下的ScheduledThreadPoolExecutor详解

ScheduledThreadPoolExecutor是Java并发编程框架中一个强大且灵活的线程池实现,专为定时与周期性任务而设计。作为ThreadPoolExecutor的子类,它不仅继承了线程池管理的高效与灵活性,还内置了基于优先级队列的延迟任务调度机制,支持…

商务分析方法与工具(五):Python的趣味快捷-文件和文件夹操作自动化

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

pytest教程-41-钩子函数-pytest_runtest_teardown

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_runtest_call钩子函数的使用方法,本小节我们讲解一下pytest_runtest_teardown钩子函数的使用方法。 pytest_runtest_teardown 钩子函数在每个测试用例执行完成后被调用&…

游戏辅助 -- 三种分析角色坐标方法(CE、xdbg、龙龙遍历工具)

所用工具下载地址: https://pan.quark.cn/s/d54e7cdc55e6 在上次课程中,我们成功获取了人物对象的基址:[[[0xd75db8]1C]28],而人物血量的地址则是基址再加上偏移量278。 接下来,我们需要执行以下步骤来进一步操作&a…

JSP技术讲解

目录 1、JSP简介 2、JSP体验 3、JSP运行原理 4、JSP基本语法 5、JSP指令 6、JSP内置九大对象 7、JSP标签 8、JSP配置 9、JSP排错 10、总结 在前面的Servlet学习中发现Servlet本质是一个java程序,因此Servlet更加擅长编写程序的业务逻辑,而如果要…

BACnet到OPC UA的楼宇自动化系统与生产执行系统(MES)整合

在智能制造的浪潮下,一家位于深圳的精密电子制造企业面临着前所未有的挑战:如何高效地将楼宇自动化系统与生产执行系统(MES)整合,实现能源管理与生产流程的精细化控制。这家企业的楼宇控制系统使用的是BACnet协议&…
最新文章