当前位置: 首页 > news >正文

【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.lryc.cn/news/388045.html

相关文章:

  • Python 面试【★★★★】
  • Knife4j 2.2.X 版本 swagger彻底禁用
  • linux下mysql的定时备份
  • 【13】地址-比特币区块链的地址
  • 【数据结构】数据结构前置知识
  • 企业数据挖掘平台产品特色及合作案例介绍
  • C++初学者指南-3.自定义类型(第一部分)-基本自定义类型/类
  • iOS之如何创建.framework静态库
  • C程序设计谭浩强第五版
  • 石油化工厂为什么要用专业防爆手机?
  • 文本生成sql模型(PipableAI/pip-sql-1.3b)
  • 机器学习中的数学底蕴与设计模式
  • 【Android面试八股文】性能优化相关面试题:如何查找CPU占用?
  • 面试框架一些小结
  • c# 往window注册表写入数据后,未写入指定的路径
  • 树莓派4B_OpenCv学习笔记13:OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆
  • Golang | Leetcode Golang题解之第198题打家劫舍
  • 基于ruoyi-app的手机短信登录(uniapp)
  • 机器学习环境搭建
  • 2095.删除链表的中间节点
  • Qt QML 坑
  • Chrome浏览器web调试(js调试、css调试、篡改前置)
  • 【Java】Logbook优化接口调用日志输出,优雅!
  • LabVIEW电压电流实时监测系统
  • 骁龙相机拍照流程分析
  • sql-语句
  • 解决Vue3项目中跨域问题的步骤
  • macos scroll direction
  • Websocket实现方式二——注解方式
  • 零基础开始学习鸿蒙开发-页面导航栏布局设计