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

Redis分片集群学习总结

Redis分片集群学习总结

  • 为什么要使用分片集群?
  • 分片集群搭建
  • Redis集群怎么写入读取数据呢?
    • 集群写入数据和读取数据怎么定位到对应的节点呢?
    • 怎么让多个数据写入同一个节点?
  • 故障转移
  • 主从集群和分片集群使用场景


为什么要使用分片集群?

在上篇文章中,我们学会了主从集群,其结构是一个主节点和多个从节点,由主节点负责写数据,从节点负责读数据,提高了Redis的数据读取性能,并且提高了Redis的可用性。但是也存在一些缺点,由于主从集群是单个主节点,因此其大量写性能较差,我们今天来学习分片集群,采用多主多从的架构,多个主节点存储Redis不同部分的数据,并且负责写入数据,其从节点负责读取数据,大大提高了并发写操作的性能。

分片集群搭建

为了实现简单,我在一个服务器上搭建。
创建六个Redis实例后,随机进入一个容器:
创建三个主节点,每一个主节点都有一个从节点:

# 进入任意节点容器
docker exec -it r1 bash
# 创建集群,1为设置每个主节点的从节点个数,而后根据该值和主节点个数搭建分片集群
redis-cli --cluster create --cluster-replicas 1 \
127.0.0.1:7001 127.0.0.1:7002 127.0.0.11:7003 \
127.0.0.1:7004 127.0.0.1.101:7005 127.0.0.1:7006

运行结果:
在这里插入图片描述
搭建完成后我们发现r1、r2、r3分别对应r3、r4、r5三个从节点,请求每一个主节点都对应了一个slots的参数,这个参数是Redis分片集群读取并写入数据的关键。

Redis集群怎么写入读取数据呢?

我们尝试写入数据并且读取数据

在这里插入图片描述
我们发现写入user时数据被定位到5474的slot中,读取student定位到5249的slot中,正好对应到上面集群运行时每个主节点对应的slot中。
在这里插入图片描述

集群写入数据和读取数据怎么定位到对应的节点呢?

通过散列插槽即slot的方式,redis集群一共有16386的插槽,在创建集群时会将这些插槽分配给每个主节点,当进行数据的写入和读取时,会基于CRC16 算法对key做hash运算,然后与16384求余,得到数据写入或读取的slot,然后到相应的主节点中进行写入或者读取

怎么让多个数据写入同一个节点?

不过hash slot的计算也分两种情况:

  • 当key中包含{}时,根据{}之间的字符串计算hash slot
  • 当key中不包含{}时,则根据整个key字符串计算hash slot
    在这里插入图片描述
    如上,我们存入{user}:student,发现定位到了存入user对应的相同的slot5747

故障转移

如果存在主节点发生故障,集群是怎么发现并处理的呢?
Redis多个主节点之间会通过心跳机制,它们每秒之间相互ping对方,如果对方在一定时间内没有相应,就会认为对方下线,会将下线的某个从节点提升为主节点。

主从集群和分片集群使用场景

分片集群可以应对高并发写和高并发读的场景,但是其结构略显复杂。
主从集群可以应对高并发读的场景,其结构更加简单。
我们需要根据项目的使用场景,即其并发写和并发读的强度


http://www.kler.cn/a/447659.html

相关文章:

  • OpenResty、Lua介绍认识
  • powershell美化
  • 重拾设计模式--建造者模式
  • 【机器人】机械臂位置、轨迹和转矩控制概要
  • 禅说:zookeeper与聚落。
  • 什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap
  • ROS2学习配套C++知识
  • Pika Labs技术浅析(五):商业智能技术
  • 【Linux】ubuntu通过远程命令行启动桌面应用
  • 前端监控之sourcemap精准定位和还原错误源码
  • 队列+宽搜
  • 力扣-图论-70【算法学习day.70】
  • 【LeetCode热题100】BFS解决拓扑排序
  • 基于K8S的微服务:一、服务发现,负载均衡测试(附calico网络问题解决)
  • 中研博硕英才网举办中国北京千名博士项目对接暨人才引进签约洽谈会
  • 37.1 prometheus管理接口源码讲解
  • 使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。
  • 【学习总结|DAY022】Java网络编程
  • 学习笔记:Verilog过程结构及在线仿真
  • MFC 实现动态控件调整和主题切换
  • 驾驶证识别API-JavaScript驾驶证ocr接口集成-场景解析
  • xcode15 报错 does not contain ‘libarclite‘
  • 2-Gin 框架中的路由 --[Gin 框架入门精讲与实战案例]
  • SpringBoot集成Canal实现MySQL实时同步数据到Redis
  • android anr 处理
  • Net9解决Spire.Pdf替换文字后,文件格式乱掉解决方法