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

Redis 集群 问题

前言


 相关系列

  • 《Redis & 目录》
  • 《Redis & 集群 & 源码》
  • 《Redis & 集群 & 总结》
  • 《Redis & 集群 & 问题》
     
     

什么是Redis集群?为什么要集群?Redis集群的优/缺点是什么?


    Redis集群是指将多台Redis实例进行协同组合以统一对外提供服务的一种部署/工作方式,也是官方提供的具体数据分区实现。通过将数据/请求以各类算法分片/分流到不同节点中保存/访问,可以达到大幅降低单台Redis实例负载的效果以实现对现实大数据/高并发场景的支持…Redis集群的优/缺点具体如下:

  • 去中心化:Redis并未设计专用组件来处理请求的引导/分流问题,而是直接将该功能内嵌到到了所有节点中以实现引导组件的同步集群,从避免单机成为高并发引导的性能瓶颈。此外Redis还允许客户端也具备一定程度的引导/分流能力,从而使得客户端可以直接访问目标节点,并以此避免代理转发的开销;
  • 动态拓展能力强:Redis集群采用了哈希槽来替换倡议的一致性哈希方案来实现数据分区,从而增强了集群的动态扩展能力,即数据重分片更加高效;
  • 内嵌主从同步/哨兵:Redis集群内嵌了主从同步/哨兵功能,从而可以在完全无人为干预的情况下建立建立合理的主从关系并进行自动的故障转移。
     
  • 不支持跨节点操作:无论是多键指令还是事务,所有涉及跨节点的操作在集群中都是不支持的;
  • 无法动态选择数据库:在开启集群的情况下只能选择0数据库;
  • 维护相对复杂:集群的扩/缩容相对复杂,因为数据重分片需要人为的指定范围/数量。
     
     

什么是哈希槽?


    哈希槽是Redis设计用于集群中实现数据分区的逻辑区间。为了增加集群的动态扩/缩容能力,Redis没有简单采用常规的一致性哈希(取模)方案实现数据分区,而是设计了16384个哈希槽用于挂靠数据。这些哈希槽会与集群中的节点建立尽可能均匀的映射关系,而当Redis/客户端通过公式CRC16(key) / 16384计算得到数据所挂靠的哈希槽时,数据便会被置于其映射的节点中保存。

    哈希槽并无法在集群扩/缩容是避免数据重分片/迁移,除非新增的节点并没有实际发挥作用。哈希槽的核心作用是将数据重分片从一致性哈希的被动性转为了主动性,因为在一致性哈希方案中节点数量的变化就意味着模的变化,同理也意味着数据所在仓库的变化,从而被动导致全量数据被强制性的重分片。但哈希槽总数的不变性注定了其与数据的挂靠关系不会改变,因此只要哈希槽与节点的映射关系不变,数据重分片就永远不会发生。而由于这两者的映射关系是受开发者主观控制的,因此迁移那(几)个节点的数据,迁移多少数据都可以自由决定,从而为最佳迁移方案的指定/执行提供了实现基础。
 
 

哈希槽为什么被固定为16384个?


    哈希槽总数16384是经验值。所谓经验值是指没有/缺少实际的理论依据,但在程序实际运行的各个方面都能取得良好效果的阈值。因此想要说出哈希槽总数被设计为16384的具体原因是难以做到的,我们只能从以下几个实际的好处来拥戴这一点:

  • 计算效率高:计算机对于2的幂次方数字处理更快,并且该数字对于CRC16算法也有优化加成;
  • 负载均衡强/迁移更灵活:对于实际开发场景中的主节点数量而言,16384个哈希槽不但可以做到对各主节点的大致均匀分配以实现负载均衡,还能保证单个主节点具备较高的哈希槽/数据颗粒度以实现迁移的灵活性,即能够选择的迁移范围更加多样化;
  • 内存开销小/通讯影响少/增加集群体量:Redis集群的节点数量是很难超过1000个的,其“主要”原因是集群中的节点两两之间都会进行通讯,因此节点数量的增加就意味着“单个节点需要通讯的其它节点数量/通讯心跳包中包含的各节点数据(主要指各节点的运行状态,用于综合反应集群状态)”也同步增加,从而在节点数量接近1000时因为出现网络拥堵现象而难以继续扩容。而在这心跳包中除了各节点数据外还有一项非常重要的哈希槽数据,还数据的本质是当前节点被分配的哈希槽。由于以位图形式(具体如下图)保存且哈希槽总数为16384的原因,该哈希槽数据会固定占有较小的2(16384/8/1024)KB大小。但如果将哈希槽总数设计的更大,那么心跳包的大小自然也会水涨船高,从而就会导致网络拥堵现象出现的更早,并进一步导致可支持的节点数量也更少。

 
 

Redis除了集群外还有别的数据分片方案?


    Redis可用的数据分片方案如下:

  • 客户端分片:由客户端根据自身算法去决定数据具体落在哪台Redis实例上;
  • 代理/中心化分片:客户端将读/写请求发送至专门用于引导/分流的代理服务器,并由代理服务器根据内部将读/写访问请求分发至相应Redis实例上。该数据分片方案的实现组件有Twemproxy;
  • 去中心化分片(最推荐):Redis集群所采用的数据分片方案,所有节点/客户端都具备引导/分流读/写请求至正确客户端的能力。
     
     

Redis集群是前期做还是后期规模上来了再做?为什么?


    对于生产/线上环境来说,在一开始就搭建Redis集群应该是更合理的做法,具体原因如下:

  • Redis非常轻量:在没有数据的情况下,一个Redis实例只占用1MB的内存,因此在一开始就启动多个Redis实例不会浪费多少内存;
  • 方便动态拓展:Redis集群支持快速扩容,这意味着你就算在早期构建了集群,但也不代表你就需要启动很多的Redis实例…一主一从即可,后续可以再加;
  • 提升稳定性:Redis集群自动支持主从同步/故障转移,这可以确保程序在生产/线上环境上稳定/安全运行,也避免了手动建立主从/启动哨兵的操作。

相关文章:

Redis 集群 问题

前言 相关系列 《Redis & 目录》《Redis & 集群 & 源码》《Redis & 集群 & 总结》《Redis & 集群 & 问题》 什么是Redis集群?为什么要集群?Redis集群的优/缺点是什么? Redis集群是指将多台Redis实例进行协…...

PyQt入门指南二十九 QListView列表视图组件

在PyQt中,QListView 是一个用于显示项目列表的视图组件。它可以与 QStandardItemModel 或其他模型一起使用,以显示和编辑数据。以下是一个简单的入门指南,介绍如何使用 QListView 组件。 安装 PyQt 首先,确保你已经安装了 PyQt5…...

cisco网络安全技术第4章测试及考试

测试 以下 ACE 将放置在何处? permit icmp any any nd-na 试题 1选择一项: 在连接到另一个路由器并已启用 IPv6 的路由器接口上 使用下一代防火墙而不是状态防火墙的一个好处是什么? 试题 2选择一项: 主动而不是被动防护互…...

vue下载安装

目录 vue工具前置要求:安装node.js并配置好国内镜像源下载安装 vue 工具 系统:Windows 11 前置要求:安装node.js并配置好国内镜像源 参考:本人写的《node.js下载、安装、设置国内镜像源(永久)&#xff…...

C++ | Leetcode C++题解之第516题最长回文子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestPalindromeSubseq(string s) {int n s.length();vector<vector<int>> dp(n, vector<int>(n));for (int i n - 1; i > 0; i--) {dp[i][i] 1;char c1 s[i];for (int j i 1; j…...

Python中的`update`方法详解及示例

Python中的update方法详解及示例 1. update方法简介2. update方法的应用场景3. 代码示例示例代码代码解释运行结果 4. 总结 在Python编程中&#xff0c;update方法是一个非常实用的工具&#xff0c;尤其是在处理集合&#xff08;Set&#xff09;数据类型时。本文将详细介绍upda…...

Docker本地安装Minio对象存储

Docker本地安装Minio对象存储 1. 什么是 MinIO&#xff1f; MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据&#xff0c;比如文件、图片、视频等&#xff0c;而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用&#xff0c;同时…...

vuex、vue-router实现原理

文章目录 Vuex 实现原理1. 状态管理2. 核心概念3. 数据流4. 实现细节 Vue Router 实现原理1. 路由管理2. 核心概念3. 数据流4. 实现细节 总结 Vuex 和 Vue Router 是 Vue.js 生态系统中非常重要的两个库&#xff0c;分别用于状态管理和路由管理。它们各自的实现原理如下&#x…...

我在命令行下剪辑视频

是的&#xff0c;你不需要格式工厂&#xff0c;你也不需要会声会影&#xff0c;更不需要爱剪辑这些莫名其妙的流氓软件&#xff0c;命令行下视频处理&#xff0c;包括剪辑&#xff0c;转码&#xff0c;提取&#xff0c;合成&#xff0c;缩放&#xff0c;字幕&#xff0c;特效等…...

Rust 力扣 - 643. 子数组最大平均数 I

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的最大和即可&#xff0c;遍历过程中刷新最大值 结果为窗口长度为k的最大和 除以 k 题解代码 impl Solution {pub fn find_max_average(nums: Vec<…...

流场主动流动控制

对于流场的主动控制而言&#xff0c;其难点主要集中在强化学习的环境搭建过程&#xff0c;如何建立数值仿真与强化学习的信息交互是研究过程中的拦路虎。经过几个星期的研究&#xff0c;已基本实现由pycharm程序数据端向star ccm端的数据传递。其主要过程包括如下过程&#xff…...

BOOST电感选型(参数详细计算)

上一篇文章我们介绍了BUCK电路中电感的计算与选型&#xff0c;与BUCK类似&#xff0c;这篇来介绍下BOOST BOOST电路原理简析 上图是一个异步BOOST电路拓扑图&#xff0c;我们先来简单回忆一下它是如何工作的&#xff1a; 1.Q闭合&#xff0c;Vin为Rload供电&#xff0c;Vin为L…...

EfficientNet-B6模型实现ISIC皮肤镜图像数据集分类

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于opencv答题卡识别判卷】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【G…...

Elasticsearch分词器基础安装

简介 Elasticsearch (ES) 是一个基于 Lucene 的搜索引擎&#xff0c;分词器是其核心组件之一&#xff0c;负责对文本数据进行分析和处理。 1. 文本分析 分词器将输入的文本拆分成一个个单独的词&#xff08;tokens&#xff09;&#xff0c;以便后续的索引和搜索。例如&#x…...

Django-邮件发送

邮件相关协议&#xff1a; SMTP&#xff08;负责发送&#xff09;&#xff1a; IMAP&#xff08;负责收邮件&#xff09;&#xff1a; POP3&#xff08;负责收邮件&#xff09;: 两者区别&#xff1a; Django发邮件&#xff1a; 邮箱相关配置&#xff1a; settings中&…...

SchooWeb2--基于课堂学习到的知识点2

SchoolWeb2 form表单input控件中各type中value值含义 默认值 text password hidden 提交给服务器的值 select option radio属性的name含义 name值相同表示是同一组单选框中的内容 script的位置 head标签 在head中使用script可以保证在页面加载时进行加载&#xff…...

Android.mk 写法

目录放在odm/bundled_uninstall_back-app/VantronMdm/VantronMdm.apk LOCAL_PATH : $(my-dir) include $(CLEAR_VARS) LOCAL_MODULE : VantronMdm LOCAL_MODULE_CLASS : APPS LOCAL_MODULE_PATH : $(TARGET_OUT_ODM)/bundled_uninstall_back-app LOCAL_SRC_FILES : $(LOCAL_M…...

精通Javascript 函数式array.forEach的8个案例

JavaScript是当今流行语言中对函数式编程支持最好的编程语言。我们继续构建函数式编程的基础&#xff0c;在前文中分解介绍了帮助我们组织思维的四种方法&#xff0c;分别为&#xff1a; array.reduce方法 帮你精通JS&#xff1a;神奇的array.reduce方法的10个案例 array.map方…...

忘记无线网络密码的几种解决办法

排名由简单到复杂 1网线直连&#xff1b; 2查看密码备份文件&#xff1b; 3问人要密码&#xff1b; 4已连接无线设备生成二维码扫描即可上网&#xff1b; 5路由器有wps功能&#xff0c;设备输入pin码可上网&#xff1b; 6已连接电脑右键wifi名&#xff0c;选择属性&#xff0c;…...

git add你真的用明白了吗?你还在无脑git add .?进入暂存区啥意思?

git add 命令用于将文件的改动添加到暂存区&#xff08;staging area&#xff09;&#xff0c;为下一次提交做好准备。简单来说&#xff0c;它标记了哪些文件或改动会被纳入下次 git commit 中。以下是 git add 的作用和使用场景&#xff1a; 1. 作用 git add 将指定文件或文…...

突破Windows远程桌面限制:RDP Wrapper多用户并发实战指南

突破Windows远程桌面限制&#xff1a;RDP Wrapper多用户并发实战指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 在远程办公与协作日益普及的今天&#xff0c;Windows远程桌面功能成为连接不同设备的重要桥梁。…...

别再只用LSTM了!试试用XGBoost给它‘打补丁’,Python时序预测精度提升实战

突破LSTM瓶颈&#xff1a;用XGBoost残差修正提升时序预测精度的工程实践 当你在电商平台的销量预测中&#xff0c;LSTM已经能捕捉到季节性波动和长期趋势&#xff0c;但每逢促销活动时预测总会出现明显偏差&#xff1b;当你在服务器负载监控中&#xff0c;LSTM模型对日常流量模…...

STM32F103C8T6接KY-9250陀螺仪,串口数据解析与姿态角计算全流程(附避坑点)

STM32F103C8T6与KY-9250陀螺仪实战&#xff1a;从硬件对接到姿态解算的完整指南 第一次拿到STM32开发板和KY-9250模块时&#xff0c;那种既兴奋又忐忑的心情记忆犹新——兴奋于即将实现酷炫的姿态检测功能&#xff0c;忐忑于不知从何下手的迷茫。本文将以手把手的方式&#xff…...

从供热管道泄漏模拟出发,聊聊Fluent中那些容易被忽略的‘粘性模型’选择细节

从供热管道泄漏模拟看Fluent粘性模型选择的工程智慧 供热管道泄漏事故的数值模拟一直是市政工程中的难点——当高温高压流体从破损处喷涌而出时&#xff0c;流动形态会经历从管道内湍流到自由射流的复杂转变。这种多尺度流动对湍流模型的选择提出了严苛考验&#xff0c;而大多数…...

vue3-composition-admin TypeScript最佳实践:类型安全与开发效率的完美平衡

vue3-composition-admin TypeScript最佳实践&#xff1a;类型安全与开发效率的完美平衡 【免费下载链接】vue3-composition-admin &#x1f389; 基于vue3 的管理端模板(Vue3 TS Vuex4 element-plus vue-i18n-next composition-api) vue3-admin vue3-ts-admin 项目地址: http…...

利用ADS实现多频段阻抗自动优化的实战指南

1. 从零开始理解多频段阻抗匹配 刚入行那会儿&#xff0c;我对阻抗匹配的理解还停留在"把50欧姆搞对就行"的层面。直到某次调试一个同时工作在900MHz和2.4GHz的双频天线时&#xff0c;才发现单频段匹配的思路完全不够用——调好了低频段&#xff0c;高频段性能就崩了…...

OpenClaw技能扩展实战:基于Qwen3-32B开发自定义文件处理器

OpenClaw技能扩展实战&#xff1a;基于Qwen3-32B开发自定义文件处理器 1. 为什么需要自定义文件处理器 上周处理季度数据时&#xff0c;我又遇到了那个老问题&#xff1a;手头有37个CSV文件需要清洗格式、去重合并&#xff0c;还要按日期归档。这种重复性工作既耗时又容易出错…...

LEDPatternLib:非阻塞LED动画库设计与嵌入式实践

1. 项目概述LEDPatternLib 是一款面向嵌入式 LED 动画控制的轻量级、模块化 Arduino 库&#xff0c;专为资源受限的微控制器平台设计。其核心目标并非替代底层驱动&#xff0c;而是构建在成熟硬件抽象层之上的非阻塞&#xff08;non-blocking&#xff09;模式动画调度框架。该库…...

Bitahub算力上新 RTX3080 10G重磅登场

针对当前 AI 开发与科研场景中算力成本高、配置复杂的痛点&#xff0c;Bitahub 平台推出了 RTX3080 10G 显卡算力服务。该显卡具备 10GB 显存&#xff0c;能够满足模型训练、推理等多场景算力需求&#xff0c;同时平台定价极具竞争力&#xff1a;单卡低至 0.82 元 / 小时&#…...

从MSTAR到RSDD-SAR:一文看懂SAR目标检测数据集20年演进,你的模型该用哪个?

从MSTAR到RSDD-SAR&#xff1a;SAR目标检测数据集的二十年技术进化与选型实战 军用雷达技术研究员李明曾在2018年遇到一个棘手问题&#xff1a;他训练的舰船检测模型在实验室测试准确率达到98%&#xff0c;实际部署到南海海域时性能却暴跌至62%。问题根源很快锁定在数据集——他…...