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.mzph.cn/news/833830.shtml

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

相关文章

Python解释器3.8.2版本安装详细教程

Python解释器提取链接链接: https://pan.baidu.com/s/1eDvwYmUJ4l7kIBXewtN4EA?pwd1111 提取码:1111 演示版本为3.6.8,链接安装包为3.8.2版,包中附加pytharm安装包。 1.双击提取好的python-exe安装文件,会…

Navigation常见场景解决方案

路由跳转场景 页面跳转是路由最常用的能力,Navigation通过NavPathStack提供了诸多方法,下文以pushDestination方法为例,介绍Navigation的路由跳转相关能力。 页面间跳转 NavPathStack提供了路由管理的能力,通过NavPathStack进行…

外企接受大龄程序员吗?

本人知乎账号同公众号:老胡聊Java,欢迎留言并咨询 亲身体会外企经历所见所闻,外企能接受大龄程序员。 1 大概是10年的时候,进一家知名外企,和我一起进的一位manager,后来听下来,年龄35&#xf…

0508_IO3

练习1&#xff1a; 1&#xff1a;使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能&#xff0c;注意&#xff0c;代码中所有函数后面&#xff0c;紧跟perror输出错误信息&#xff0c;要求这些错误信息重定向到错误日志 err.txt 中去 1 #include <stdio.h…

【matlab基础知识代码】(十二)逆矩阵与广义逆矩阵

>> Hhilb(4);H1inv(H),norm(H*H1-eye(4))H1 1.0e03 *0.0160 -0.1200 0.2400 -0.1400-0.1200 1.2000 -2.7000 1.68000.2400 -2.7000 6.4800 -4.2000-0.1400 1.6800 -4.2000 2.8000ans 2.8455e-13 矩阵维数较大&#xff0c;警告: 矩阵接近奇…

svg画扇形进度动画

有人问下面这种图好怎么画&#xff1f;svg 想了下&#xff0c;确实用svg可以&#xff0c;可以这么设计 外层是一个容器放置内容&#xff0c;并且设置overflow:hidden&#xff0c; 内层放一个半径大于容器宽高一半的svg&#xff0c;并定位居中&#xff0c;然后svg画扇形&#x…

线程的组成、执行特点、创建的两种方式

线程的组成&#xff1a; cpu时间片 运行内存&#xff1a;栈、堆 线程的逻辑代码 线程执行的特点&#xff1a; 抢占式执行&#xff0c;结果随机&#xff0c;效率高&#xff0c;可以防止单一线程长时间独占CPU 在单核cpu中&#xff0c;宏观上同时执行&#xff0c;微观上顺序…

ABC猜想:数论中的未解之谜

ABC猜想&#xff1a;数论中的未解之谜 引言 ABC猜想是数论领域中一个著名的未解问题&#xff0c;它由法国数学家约瑟夫奥斯特莱&#xff08;Joseph Oesterl&#xff09;和大卫马瑟&#xff08;David Masser&#xff09;在1985年提出。ABC猜想涉及整数加法和乘法之间的深刻联系…

C++青少年简明教程之一:基础知识

C青少年简明教程之一&#xff1a;基础知识 电脑程序设计&#xff08;Computer programming&#xff09;&#xff0c;或称程序设计&#xff08;programming&#xff09;&#xff0c;是给出解决特定问题程序的过程&#xff0c;程序设计往往以某种程序设计语言为工具&#xff0c;给…

【算法】逃离大迷宫

题目信息 在一个 10^6 x 10^6 的网格中&#xff0c;每个网格上方格的坐标为 (x, y) 。 现在从源方格 source [sx, sy] 开始出发&#xff0c;意图赶往目标方格 target [tx, ty] 。数组 blocked 是封锁的方格列表&#xff0c;其中每个 blocked[i] [xi, yi] 表示坐标为 (xi, …

【软件测试】用例篇 -- 详解

一、测试用例的基本要素 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素。&#xff08;注意&#xff1a;不需要执行结果&#xff0c;因为执行结果…

IO 5.8日

1&#xff1a;使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能&#xff0c;注意&#xff0c;代码中所有函数后面&#xff0c;紧跟perror输出错误信息&#xff0c;要求这些错误信息重定向到错误日志 err.txt 中去 2&#xff1a;判断一个文件是否拥有用户可写…

python在Django中实现文件上传功能主要涉及几个步骤

在Django中实现文件上传功能主要涉及几个步骤。以下是一个基本的指南,用于在Django应用程序中设置文件上传: 设置模型 首先,你需要在模型中定义一个FileField或ImageField。对于图像,ImageField更为合适,因为它包含对图像大小调整和其他图像相关功能的验证。 python 复…

OpenFeign 定义后备工厂进行服务降级

OpenFeign 定义后备工厂进行服务降级可以使得远程接口调用失败时进行降级处理&#xff0c;而不会直接报错&#xff0c;影响后续代码逻辑。定义后备工厂的步骤如下&#xff1a; 远程接口处定义。 FeignClient(value ServiceConstants.SYSTEM, fallbackFactory RemoteFileFallb…

Android单行字符串末尾省略号加icon,图标可点击

如图 设置仅显示单行字符串&#xff0c;末尾用省略号&#xff0c;加跟一个icon&#xff0c;icon可点击 tvName.text "test"val drawable ResourcesCompat.getDrawable(resources, R.mipmap.icon_edit, null)tvName.setCompoundDrawablesWithIntrinsicBounds(null,…

【如此简单!数据库入门系列】之无序不代表混乱 -- 堆文件

文章目录 前言堆文件链表实现页目录实现总结系列文章 前言 还记得上次遗留的问题吗&#xff1f; 以什么组织方式将数据保存在磁盘中&#xff1f; 今天我们接着讨论这个问题。 首先想一个问题&#xff1a;有一天&#xff0c;你开着自己心爱的大型SUV去超市购物。在停车场入口看…

威客网上招标系统(五)

目录 5 详细设计 5.1 系统首页 5.1.1系统首页&#xff08;网站首页index.jsp&#xff09; 5.1.2 下沙派威客网首页界面说明 5.2 站内新闻信息 5.2.1站内新闻操作界面 5.2.2系统主操作界面说明 5.3威客在线操作界面 5.3.1 威客在线操作界面 5.3.2威客在线说明 5.4系统…

langchain 数据向量化存储

中文向量化模型候选&#xff1a; 1、sentence-transformers/all-MiniLM-L6-v2 2、BAAI/bge-m3 3、多语言模型&#xff1a;BAAI/bge-m3 支持的输入长度<8192 from langchain_community.embeddings import HuggingFaceBgeEmbeddings model_name "sentence-transforme…

文件IO-使用dup2实现错误日志功能及判断文件权限,并终端输出

1&#xff1a;使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能&#xff0c;注意&#xff0c;代码中所有函数后面&#xff0c;紧跟perror输出错误信息&#xff0c;要求这些错误信息重定向到错误日志 err.txt 中去 代码&#xff1a; #incl…

CP AUTOSAR之AUTOSAR OS详细说明(二)(正在更新中)

本文遵循autosar标准:R22-11 1 - 7章请参阅 CP AUTOSAR之AUTOSAR OS详细说明(一): https://blog.csdn.net/sehanlingfeng/article/details/138585435 8 API规范 本章包含操作系统提供的API。请注意,并非所有服务都适用于所有可伸缩性类别,并且某些服务的行为针对特定可…