Redis- 切片集群
切片集群
- 切片集群
- 什么是Redis Cluster吗?为什么需要切片集群?
- Redis Cluster的数据分片机制是怎样的?
- 哈希槽的算法是什么
- 基本算法流程
- 待填坑
切片集群
什么是Redis Cluster吗?为什么需要切片集群?
Redis Cluster是Redis官方提供的分布式解决方案,它通过数据分片技术将数据自动分散存储到多个节点上,实现了水平扩展能力.
Redis需要切片集群主要是为了解决单机Redis的几个关键限制:
首先是内存容量限制。单个Redis实例受限于服务器物理内存,通常建议不超过25-30GB。而在大型应用中,数据量轻易就能超过这个限制。通过切片集群,我们可以将数据分散到多个节点,突破单机内存限制。
其次是计算能力瓶颈。单个Redis实例使用单线程模型处理命令,虽然非常高效,但仍有性能上限,通过切片集群,请求会被分散到多个节点处理,可以显著提高了整体吞吐量.
第三是网络带宽限制。单个Redis实例的网络IO也是有上限的,特别是在高并发读写场景下。切片集群可以分散网络压力。
最后,切片集群还提供了更高的可用性。Redis Cluster内置了主从复制和故障自动转移机制,当主节点故障时,集群会自动选举对应的从节点升级为新主节点,保证服务持续可用。
Redis Cluster的数据分片机制是怎样的?
Redis Cluster采用哈希槽(Hash Slot)的方式进行数据分片,这是一种非常精巧的设计.
整个集群固定划分为16384个槽位,每个主节点负责其中一部分槽位。数据分片的具体过程是:
首先,对每个key使用CRC16算法计算哈希值,然后对16384取模,得到0-16383之间的一个槽位号。
然后,根据这个槽位号找到负责该槽位的节点,将数据存储在该节点上。这样,数据就被均匀地分散到了集群的各个节点。
关于为什么选择16384(2^14)个槽而不是更多,这是Redis作者经过权衡后的决定:
- 16384个槽占用空间小,使用2个字节就能表示所有槽位
- 槽位太多会增加心跳包大小和内存消耗
- 槽位太少则不利于均匀分配和迁移
Redis Cluster还有一个重要特性是槽位迁移。当我们需要扩容或缩容集群时,可以在线迁移槽位及其数据,而不影响集群的正常服务。在迁移过程中,客户端请求会通过MOVED或ASK重定向到正确的节点。
哈希槽的算法是什么
Redis Cluster使用的hash槽算法相对简单但非常高效,它主要基于CRC16(Cyclic Redundancy Check- 循环冗余校验算法)哈希函数。
基本算法流程
- CRC16哈希计算:对key使用CRC16算法计算出一个16位的哈希值
- 取模运算:将得到的哈希值对16384取模,得到槽位号(0-16383)
待填坑
相关文章:
Redis- 切片集群
切片集群 切片集群什么是Redis Cluster吗?为什么需要切片集群?Redis Cluster的数据分片机制是怎样的?哈希槽的算法是什么基本算法流程 待填坑 切片集群 什么是Redis Cluster吗?为什么需要切片集群? Redis Cluster是R…...
【项目日记(十)】瓶颈分析与使用基数树优化
前言 上一期我们对整个项目进行了细节部分的优化,并在最后测试了多线程环境下和malloc的性能对比测试,发现malloc有时候还是更胜一筹的,基于此我们进行对我们的内存池进行瓶颈分析与优化。 目录 前言 一、项目瓶颈分析 VS编译器下性能分…...
后台管理系统比较全面的分析对比
以下是主流的 后台管理系统模板 分类与技术选型指南,涵盖开源、商业及全栈解决方案,可根据项目需求灵活选择: 一、开源免费模板 1. React 技术栈 Ant Design Pro 官网:pro.ant.design特点:阿里出品,内置 R…...
HCIA复习拓扑实验
一.拓扑图 二.需求 1.学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到百度网络中HTTP服务器 2.学校网络内部网段基于192.168.1.0/24划分,PC1可以正常访问3.3.3.0/24网段,但是PC2不允许 3.学校内部路由使用静态路由,R1和R2之间两…...
TI毫米波雷达开发 —— 串口输出数据解析
TI毫米波雷达开发 —— 串口输出解析 TLV协议协议概述HeaderBodyPadding TI 毫米波雷达芯片计算的结果数据都会从UART发出供上位机进行解析并展示。解析和展示是两个不同的概念,解析指提取有效数据并转换成常见的度量值。展示指数据的可视化。 由于雷达这个领域的特…...
Docker Desktop 4.38 安装与配置全流程指南(Windows平台)
一、软件定位与特性 Docker Desktop 是容器化应用开发与部署的一体化工具,支持在本地环境创建、管理和运行Docker容器。4.38版本新增GPU加速支持、WSL 2性能优化和Kubernetes 1.28集群管理功能,适用于微服务开发、CI/CD流水线搭建等场景。 二、安装环境…...
【AD】5-16 泪滴的添加
1.工具—滴泪(快捷键TE)...
聊天服务器分布式改造
目前的聊天室是单节点的,无论是http接口还是socket接口都在同一个进程,无法承受太多人同时在线,容灾性也非常差。因此,一个成熟的IM产品一定是做成分布式的,根据功能分模块,每个模块也使用多个节点并行部署…...
el-table(elementui)表格合计行使用以及滚动条默认样式修改
一、el-table新增合计行以及el-table展示数据出现的问题 1. 使用合计行 el-table的属性show-summary设为true,即可在表格尾部展示合计行。默认情况下,第一列不展示数据,而显示合计二字,可以通过sum-text自己配置,其余…...
Web前端开发——HTML基础下
HTML语法 一表格1.基本格式2.美化表格合并居中属性 二表单1.input2.select3.textarea4.button5.date6.color7.checkbox8.radio9.range10.number 一表格 1.基本格式 HTML表格由<table>标签定义 其中行由<tr>标签定义,单元格由<td>定义。我们先来…...
Python使用入门(一)
初识数据类型 整型(int) print(666) print(2 10) print(2 * 12)字符串(str) 单行字符串 #单行字符串 print("我是小红aaa") print(我是小红aaa)print("中国上海") print(中国上海)# 输出带引号的字符串 print(我是"小红aaa) print("我是\&qu…...
基于multisim的花样彩灯循环控制电路设计与仿真
1 课程设计的任务与要求 (一)、设计内容: 设计一个8路移存型彩灯控制器,基本要求: 1. 8路彩灯能演示至少三种花型(花型自拟); 2. 彩灯用发光二极管LED模拟; 3. 选做…...
求最大公约数【C/C++】
大家好啊,欢迎来到本博客( •̀ ω •́ )✧,我将带领大家详细的了解最大公约数的思想与解法。 一、什么是公约数 公约数,也称为公因数,是指两个或多个整数共有的因数。具体来说,如果一个整数能被两个或多个整数整除&…...
leetcode day27 455+376
455 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有…...
go的grpc
GRPC介绍 目录 单体架构微服务架构问题原始的grpc 服务端客户端原生rpc的问题 grpc的hello world 服务端客户端 proto文件proto语法 数据类型 基本数据类型其他数据类型 编写风格多服务 单体架构 只能对整体扩容一荣俱荣,一损俱损代码耦合,项目的开…...
算法每日一练 (9)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 算法每日一练 (9)最小路径和题目描述解题思路解题代码…...
软考高级信息系统项目管理师笔记-第10章项目进度管理
第10章项目进度管理 10.1 管理基础 10.1.1 项目进度计划的定义和总要求 1、项目进度计划是 一种用于沟通和管理干系人期望的工具,为绩效报告提供依据。 2、项目管理团队编制进度计划的一般步骤为: 首先选择进度计划方法,例如关键路径法; 然后将项目特定数据,如活动、计…...
专门为高速连续扫描设计的TDI工业相机
TDI(Time Delay Integration,时间延迟积分)工业相机是一种基于特殊CCD(电荷耦合器件)技术的成像设备,主要用于高速、高灵敏度、高分辨率的图像采集场景。其核心原理是通过多级积分和同步电荷转移技术&#…...
【Vue3】实现一个超过高度后可控制显示隐藏的组件
组件效果图 未达到最大高度 达到设置的最大高度 进行展开 实现代码 组件代码 备注:通过tailwindcss设置的样式,通过element-plus/icons-vue设置的图标,可根据情况进行替换 <template><!-- 限制高度组件 --><div ref"…...
Spring提供的SPEL表达式
SPEL 1. 概述 SpEL是Spring框架中用于表达式语言的一种方式。它类似于其他编程语言中的表达式语言,用于在运行时计算值或执行特定任务。 SpEL提供了一种简单且强大的方式来访问和操作对象的属性、调用对象的方法,以及实现运算、条件判断等操作。它可以…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
