【redis】redis分片集群基础知识

1、基本概念

1.1定义

  • 分片:数据按照某种规则(比如哈希)被分割成多个片段(或分片),每个片段被称为一个槽(slot)。槽是Redis分片集群中数据的基本单元。
  • 节点:Redis分片集群由多个节点组成,每个节点都是一个独立的Redis服务器。每个节点都负责存储和处理一部分数据片段,并且节点之间相互通信以实现数据的路由和同步。
  • 槽分配:在Redis分片集群中,每个槽都被分配给一个节点,节点负责存储和处理分配给它的槽中的数据。槽的分配可以由系统自动完成,也可以手动配置。

1.2Hash Slot

1.2.1简介

  • Hash Slot(哈希槽)在Redis集群中是一个核心概念,主要用于实现数据的分布式存储和处理。
  • Hash Slot是Redis Cluster数据分片的核心单元。
  • 在Redis集群中,整个键空间被划分为固定数量的哈希槽,每个槽位是一个逻辑分区。
  • 默认情况下,Redis集群包含16384个哈希槽,编号从0到16383。
  • Redis使用CRC16算法来计算键的哈希值,并通过对16383取模来决定键应该放置在哪个哈希槽上。
  • Redis集群中的哈希槽数量是固定的,且不可更改。因此,在创建集群时需要合理规划节点数量和哈希槽的分配方式。

1.2.2作用

  • Hash Slot用于将数据分散到多个节点上,以实现水平扩展和负载均衡。
  • 当客户端执行对数据的读写操作时,Redis会根据数据的键计算出一个哈希值,然后根据这个哈希值将数据分配到相应的哈希槽上,最终决定存放在哪个节点上。

1.2.3分配

  • 在Redis集群中,每个节点负责管理一部分哈希槽。例如,如果集群有3个节点,哈希槽可能会被分配为:节点A包含0到5500号哈希槽,节点B包含5501到11000号哈希槽,节点C包含11001到16384号哈希槽。
  • 当有新的节点加入集群或者节点发生故障时,哈希槽会重新分配,从而保持数据的均衡分布。

1.2.4特性

  • Hash Slot的概念使得Redis集群能够实现高可用性和可扩展性,因为数据被均匀地分布在多个节点上,并且每个节点只负责管理一部分哈希槽。
  • 当节点出现故障时,只有该节点上的哈希槽中的数据会受到影响,其他节点上的数据仍然可用。
  • 故障节点的哈希槽可以被重新分配到其他健康的节点上,从而保持数据的完整性和可用性。

2、特性优势

  • 水平扩展:Redis集群的节点数量可以根据需要进行动态调整,添加或删除节点不会影响集群的性能或可靠性。
  • 负载均衡:通过智能路由算法将请求分配到不同的节点上,以提高并发性和系统可用性。
  • 数据分散:将相同键值的数据分散存储在不同节点上,最大限度地提高可用性,并优化网络带宽。
  • 数据副本:每个节点都拥有自己的数据副本,以保证数据安全和可靠性。
  • 自动故障转移:当Redis集群中的某个节点出现故障时,系统可以自动迁移该节点上的数据,并将其重新分配到其他健康的节点上,从而保持集群的可用性。

3、配置实现

1. 环境准备
  • 准备多台服务器或虚拟机来部署Redis分片集群。
  • 确保每台服务器上已经安装了Redis。
2. 配置文件配置
  • 在每台服务器的Redis配置文件中,设置集群相关的参数。
    • cluster-enabled yes:开启集群功能。
    • cluster-config-file nodes.conf:指定集群配置文件名称(这个文件不需要手动创建,Redis会自动生成和维护)。
    • cluster-node-timeout 5000:节点间超时互联的阈值(单位:毫秒)。
    • 根据实际情况设置其他参数,如端口号、密码等。
3. 启动所有Redis节点
  • 在每台服务器上启动Redis服务。
4. 创建集群
  • 使用Redis提供的工具(如redis-cli)来创建集群。
  • <nodeX-ip>:<nodeX-port> 是每个Redis节点的IP地址和端口号。
  • --cluster-replicas 1 表示每个主节点有一个从节点。
5. 分配槽位
  • 在Redis集群中,整个键空间被划分为16384个哈希槽(slot),需要将这些槽位分配给各个主节点。
  • 可以使用redis-cliCLUSTER ADDSLOTS命令手动分配槽位,但在实际使用中,Redis通常会自动完成槽位的分配。
6. 测试集群
  • 使用redis-cli连接到集群中的任意一个节点,并执行一些读写操作来测试集群是否正常工作。
  • 需要注意的是,在连接集群时需要加上-c参数,以启用集群模式。

4、集群中的数据操作

4.1 数据的存储和读取

  • 哈希槽(Slot):Redis将整个键空间划分为16384个哈希槽(slot)。每个键通过哈希函数(如CRC16)计算得到一个哈希值,然后对16384取模,确定其所属的槽。
  • 数据路由:当客户端发送写请求(如SET key value)或读请求(如GET key)时,Redis集群首先根据键的哈希值确定其所属的槽,然后将请求路由到负责该槽的节点进行存储或读取。

4.2 数据的写入

  • 节点选择:通过哈希算法计算出键所属的槽后,Redis集群将请求路由到负责该槽的主节点(Master node)进行数据的写入。
  • 数据复制:为了提高数据的可用性和容错性,Redis分片集群通常会对数据进行复制。每个槽中的数据通常会有一个或多个副本(Replica),这些副本存储在不同的节点上。当主节点宕机时,系统会自动选举一个从节点(副本节点)来成为新的主节点,从而保证数据的可用性。

4.3 数据的读取

  • 路由过程:与写入操作类似,当客户端发送读请求时,Redis集群首先确定键所属的槽,然后将请求路由到负责该槽的节点进行数据的读取。
  • 读取偏好:在某些情况下,客户端可以选择从主节点或从节点读取数据。从节点通常用于读取操作,以减轻主节点的负载。但是,从节点的数据可能会有一定的延迟,因为从节点是异步复制主节点的数据。

4.4 客户端支持

  • 客户端库:客户端库(如Jedis、Lettuce等)会维护集群的槽分配信息。当客户端发出请求时,客户端库会根据槽分配信息将请求路由到正确的节点。如果集群配置发生变化(如重新分片),客户端库会更新槽分配信息。
  • 集群状态监控:Redis提供了监控集群状态的工具(如redis-cli、redis-trib.rb等),可以通过命令行或Web界面查看集群的实时状态、数据流量、QPS等信息。

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

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

相关文章

DRAM vs. SRAM:了解动静态随机存取存储器的区别

在计算机领域&#xff0c;DRAM&#xff08;动态随机存取存储器&#xff09;和SRAM&#xff08;静态随机存取存储器&#xff09;是两种重要的存储器类型。它们在结构、工作原理、性能和应用上都有显著的不同。本文将详细介绍这两种存储器&#xff0c;帮助基础小白理解它们的区别…

LLama-Factory使用教程

本文是github项目llama-factory的使用教程 注意&#xff0c;最新的llama-factory的github中训练模型中&#xff0c;涉及到本文中的操作全部使用了.yaml配置。 新的.yaml的方式很简洁但不太直观&#xff0c;本质上是一样的。新的readme中的.yaml文件等于下文中的bash指令 PS: …

利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API

谷歌在2024年4月发布了全新一代的多模态模型Gemini 1.5 Pro&#xff0c;Gemini 1.5 Pro不仅能够生成创意文本和代码&#xff0c;还能理解、总结上传的图片、视频和音频内容&#xff0c;并且支持高达100万tokens的上下文。在多个基准测试中表现优异&#xff0c;性能超越了ChatGP…

LeetCode 每日一题 2024/6/24-2024/6/30

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 6/24 503. 下一个更大元素 II6/25 2732. 找到矩阵中的好子集6/26 2741. 特别的排列6/27 2734. 执行子串操作后的字典序最小字符串6/28 2742. 给墙壁刷油漆6/29 2710. 移除字…

【机器学习】Python sorted 函数

目录&#xff1a; 什么是sorted()函数列表降序排序应用到字符串自定义排序规则实际应用 Python中的内置函数——sorted()。 1. 什么是sorted()函数 在Python中&#xff0c;sorted()是一个内置函数&#xff0c;用于对任何可迭代对象&#xff08;如列表、元组、字符串等&…

macos scroll direction

If there is no Trackpad option, we can change it in the Mouse option. How to Change the Scroll Direction on a Mac: 2 Ways

AliyunOS安装Node.js

方法1&#xff1a;dnf软件包安装工具自动安装 最方便的安装方式是通过系统的dnf工具&#xff0c;我测试使用的AliyunOS的版本是Alibaba Cloud Linux 3.2104&#xff0c;具体流程如下&#xff1a; dnf module list nodejs #列出服务器中可以使用的所有nodejs版本确定下来希望安…

【折腾手机】一加6T刷机postmarketOS经历和体验

写在前面 到目前为止&#xff0c;我已经花了非常多的时间去学习和了解x86架构和RISC-V架构&#xff0c;对它们的指令集编程、指令格式的设计、编译套件的使用都亲自去体会和实践过&#xff0c;学到了很多的东西。但是对于离我们最近的arm架构却了解甚少。为什么说离我们最近呢…

2095.删除链表的中间节点

给你一个链表的头节点 head 。删除链表的中间节点 &#xff0c;并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和…

网络==>总论v4

既然是写ICT方面的文章&#xff0c;就要不断更新版本&#xff0c;不是文学&#xff0c;可以一劳永逸&#xff0c;如果不更新&#xff0c;看十年前或者二十年前的书意义不大&#xff0c;这就是为啥看到很多编程书都更新到第十几版了&#xff0c;因为要与时俱进。 在去一个地方旅…

51单片机第21步_将TIM0用作两个8位定时器同时将TIM1用作波特率发生器

本章重点讲解将TIM0用作两个8位定时器&#xff0c;同时将TIM1用作波特率发生器。 当定时器T0在方式3时&#xff0c;T1不能产生中断&#xff0c;但可以正常工作在方式0、1、2下&#xff0c;大多数情况下&#xff0c;T1将用作串口的波特率发生器。 1、定时器0工作在模式3框图&a…

第22集《大乘起信论》

请大家打开《讲义》第四十四页&#xff1a; 癸二、显示用 子一、正明用即真如 前面讲到一心的体大跟相大&#xff0c;讲到真如门&#xff1b;这以下讲到用&#xff0c;这当中分三科&#xff0c;先看子一、正明用即真如。这个体大跟相大它是真如门&#xff0c;是一个非因缘所…

Webpack: 核心配置结构

概述 Webpack 是一种 「配置」 驱动的构建工具&#xff0c;所以站在应用的角度&#xff0c;必须深入学习 Webpack 的各项配置规则&#xff0c;才能灵活应对各种构建需求。本文将作为小册应用系列的一个总结&#xff0c;汇总与应用配置相关的各项知识点&#xff0c;包括&#x…

高并发场景下的热点key问题探析与应对策略

目录 一、问题描述 二、发现机制 三、解决策略分析 &#xff08;一&#xff09;解决策略一&#xff1a;多级缓存策略 客户端本地缓存 代理节点本地缓存 &#xff08;二&#xff09;解决策略二&#xff1a;多副本策略 &#xff08;三&#xff09;解决策略三&#xff1a;热点…

XJTUSE-数据结构-homework1

任务 1 题目&#xff1a; 排序算法设计&#xff1a; 需要写Selection、Shell、Quicksort 和 Mergesort四种排序算法&#xff0c;书上讲述比较全面而且不需要进行额外的优化&#xff0c;下面我简要地按照自己的理解讲述。 Selection&#xff08;选择排序&#xff09;&#xff…

vtk学习笔记

tfun和gradtfun的区别 在体绘制&#xff08;Volume Rendering&#xff09;中&#xff0c;vtk.vtkPiecewiseFunction 通常用于定义两种类型的不透明度映射&#xff1a;标量不透明度映射和梯度不透明度映射。虽然这两个函数都使用 vtk.vtkPiecewiseFunction 来创建&#xff0c;但…

【孙子兵法】始计篇 - 原文注解笔记 ① ( 五事 - 道、天、地、将、法 )

文章目录 一、始计篇 原文注解笔记1、兵者&#xff0c;国之大事2、五事道天地将法 一、始计篇 原文注解笔记 1、兵者&#xff0c;国之大事 孙子曰&#xff1a;兵者&#xff0c;国之大事&#xff0c;死生之地&#xff0c;存亡之道&#xff0c;不可不察也。 孙子说 : 战争 , 是国…

Git上传大文件时各种报错解决方案汇总

如何通过LFS向Github添加大文件 https://zhuanlan.zhihu.com/p/699750305&#xff08;测试失败&#xff09; Configuring Git Large File Storage - GitHub Docs HTTP 400 curl 22 The requested URL returned error: 400 send-pack: unexpected disconnect while reading si…

Django ORM 中过滤 JSON 数据

简介 首先,我们假设您有一个名为 MyModel 的 Django 模型,它包含一个 JSONField 类型的字段,名为 data。这个 data 字段可以存储各种 JSON 格式的数据。 过滤 JSON 字段中的键值对 您可以使用双下划线 __ 语法来访问 JSON 字段中的嵌套键值对。例如: # 过滤 data 字段中 &qu…

瓦努阿图将出台数字资产监管法案

亲爱的国民&#xff0c;你们好&#xff01; “瓦努阿图即将在数字资产领域迎来突破性转型&#xff0c;全世界的加密爱好者准备好迎接一波激动人心的信仰充值。” 对&#xff0c;就是它&#xff01;比特币定为国家法定货币&#xff0c;央行开发数字货币钱包&#xff0c;总统新…