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

17 redis集群方案

1、RedisCluster分布式集群解决方案

为了解决单机内存,并发等瓶颈,可使用此方案解决问题.
Redis-cluster是一种服务器Sharding技术,Redis3.0以后版本正式提供支持。

这里的集群是指多主多从,不是一主多从。

2、redis集群的目标
1.高性能可线性扩展至最多1000节点
2.集群中没有代理,(集群节点间)使用异步复制,没有归并操作。

可以接受的写入丢失
在发生failover之前的小段时间窗内的写操作可能在failover中丢失)。而在(网络)分区故障下,对少数派master的写入,发生写丢失的时间窗会很大。
可用性:
Redis Cluster在以下场景下集群总是可用:大部分master节点可用,并且对少部分不可用的master,每一个master至少有一个当前可用的slave。更进一步,通过使用 replicas migration 技术,当前没有slave的master会从当前拥有多个slave的master接受到一个新slave来确保可用性。

3、Redis Cluster的日常工作
1.负责维护数据,和获取集群状态,包括将keys映射到正确的节点。
2.集群节点同样可以自动发现其他节点、检测不工作节点、以及在发现故障发生时晋升slave节点到master
3.所有集群节点通过由TCP和二进制协议组成的称为 Redis Cluster Bus 的方式来实现集群的节点自动发现、故障节点探测、slave升级为master等任务。
4.每个节点通过cluster bus连接所有其他节点。
5.节点间使用gossip协议进行集群信息传播,以此来实现新节点发现,发送ping包以确认对端工作正常,以及发送cluster消息用来标记特定状态。
6.cluster bus还被用来在集群中创博Pub/Sub消息,以及在接收到用户请求后编排手动failover。

在这里插入图片描述

4、分片模块

哈希槽(Hash Slot)

1.Redis-cluster没有使用一致性hash,而是引入了哈希槽的概念
2.Redis-cluster中有16384(214次方)个哈希槽,每个key通过CRC16校验后对16383取模来决定放置哪个槽。
3.Cluster中的每个节点负责一部分hash槽(hash slot)。

例如、集群中存在三个节点:

1.节点A包含05500号哈希槽;
2.节点B包含550111000号哈希槽;
3.节点C包含1100116384号哈希槽。

为啥是16384个slot?

1.基于网络带宽的考虑,节点众多的话,即使redis内部的局域网之间的节点之间的网络通讯,也是会导致带宽吃紧,更别提异地之间的网络通讯,对运营商之间的网络要求很高。
2.哈希slot,是通过bitmap来保存数据的,在传输过程中会对bitmap进行压缩,压缩算法涉及Node的数量,如果节点数量很高,那么压缩算法的效率会很低,所以redis的作者不建议redis的节点超过1000个节点.

在redis节点发送心跳包时需要把所有的槽放到这个心跳包里,以便让节点知道当前集群信息,16384=16k,在发送心跳包时使用char进行bitmap压缩后是2k(2 * 8 (8 bit) * 1024(1k) = 16K),也就是说使用2k的空间创建了16k的槽数。

虽然使用CRC16算法最多可以分配65535(2^16-1)个槽位,65535=65k,压缩后就是8k(8 * 8 (8 bit) * 1024(1k) =65K),也就是说需要8k的心跳包,作者认为这样不值得;并且一般情况下一个redis集群不会有超过1000个master节点,所以16k的槽位是个比较合适的选择.

Keys hash tags
Hash tags提供了一种途径,用来将多个(相关的)key分配到相同的hash slot中。这时Redis Cluster中实现multi-key操作的基础.

hash tag规则如下:
如果满足如下规则,{和}之间的字符将用来计算HASH_SLOT,以保证这样的key保存在同一个slot中。

1.key包含一个{字符
2.并且 如果在这个{的右面有一个}字符
3.并且 如果在{}之间存在至少一个字符

例如:

1.{user1000}.following和{user1000}.followers这两个key会被hash到相同的hash slot中,因为只有user1000会被用来计算hash slot值。
2.foo{}{bar}这个key不会启用hash tag因为第一个{}之间没有字符。

Cluster nodes属性
每个节点在cluster中有一个唯一的名字。这个名字由160bit随机十六进制数字表示,并在节点启动时第一次获得(通常通过/dev/urandom)。

节点ID被用来在整个cluster中标识每个节点。一个节点可以修改自己的IP地址而不需要修改自己的ID。

Cluster总线
每个Redis Cluster节点有一个额外的TCP端口用来接受其他节点的连接。这个端口与用来接收client命令的普通TCP端口有一个固定的offset。该端口等于普通命令端口加上10000.例如,一个Redis街道口在端口6379坚挺客户端连接,那么它的集群总线端口16379也会被打开。

节点到节点的通讯只使用集群总线,同时使用集群总线协议:有不同的类型和大小的帧组成的二进制协议。

集群拓扑
Redis Cluster是一张全网拓扑,节点与其他每个节点之间都保持着TCP连接。 在一个拥有N个节点的集群中,每个节点由N-1个TCP传出连接,和N-1个TCP传入连接。 这些TCP连接总是保持活性(be kept alive)。当一个节点在集群总线上发送了ping请求并期待对方回复pong,(如果没有得到回复)在等待足够成时间以便将对方标记为不可达之前,它将先尝试重新连接对方以刷新与对方的连接。 而在全网拓扑中的Redis Cluster节点,节点使用gossip协议和配置更新机制来避免在正常情况下节点之间交换过多的消息,因此集群内交换的消息数目(相对节点数目)不是指数级的。

各种分区方案
在这里插入图片描述
RedisCluster采用虚拟槽分区,所有的键根据哈希函数(CRC16[key]&16383)映射到0-16383槽内

在这里插入图片描述

相关文章:

17 redis集群方案

1、RedisCluster分布式集群解决方案 为了解决单机内存,并发等瓶颈,可使用此方案解决问题. Redis-cluster是一种服务器Sharding技术,Redis3.0以后版本正式提供支持。 这里的集群是指多主多从,不是一主多从。 2、redis集群的目标…...

[数据结构]—栈和队列

💓作者简介🎉:在校大二迷茫大学生 💖个人主页🎉:小李很执着 💗系列专栏🎉:数据结构 每日分享✨:到头来,有意义的并不是结果,而是我们度…...

【GridSearch】 简单实现并记录运行效果

记录了使用for循环实现网格搜索的简单框架。 使用df_search记录每种超参数组合下的运行结果。 lgb_model.best_score返回模型的最佳得分 lgb_model.best_iteration_返回模型的最佳iteration也就是最佳n_extimator import numpy as np import pandas as pd import lightgbm as …...

SecureCRT出现Key exchange failed.No compatible key exchange method. 错误解决方法

SecureCRT出现Key exchange failed.No compatible key exchange method. 如下 Key exchange failed. No compatible key exchange method. The server supports these methods: curve25519-sha256,curve25519-sha256libssh.org,diffie-hellman-group-exchange-sha256解决方法&…...

Android RGB转YUV的算法

将 ARGB(Alpha-Red-Green-Blue)颜色空间转换为 YUV(亮度-色度)颜色空间的常用算法有以下几种: 矩阵转换法 使用预定义的转换矩阵将 RGB 值转换为 YUV 值。其中,Y 表示亮度,U 和 V 表示色度。这…...

Spring事务底层原理(待完善)

EnableTransactionManagement 我们经常使用EnableTransactionManagement开启事务, 这个注解导入一个类,Import(TransactionManagementConfigurationSelector.class), 会在spring容器增加两个bean, AutoProxyRegistrar和ProxyTransactionManagementConfiguration. AutoProxyRe…...

微信小程序 修改默认单选,多选按钮样式

微信小程序 修改默认单选&#xff0c;多选按钮样式 1.在微信开发者文档中复制一份单选或者多选的代码 <!--pages/index3/index.wxml--> <radio-group bindchange"radioChange"><label class"weui-cell weui-check__label" style"dis…...

「最优化基础知识2」一维搜索,以及python代码

最优化基础知识&#xff08;2&#xff09; 无约束优化问题&#xff0c;一维搜索 一、一维搜索 一维搜索的意思是在一个方向上找到最小点。 用数学语言描述&#xff0c;X*Xk tPk&#xff0c;从Xk沿着Pk方向行走t到达最小点X*。 1、收敛速度&#xff1a; 线性收敛&#xff1…...

工厂模式之抽象工厂模式(常用)

抽象工厂模式 工厂方法模式中考虑的是一类产品的生产&#xff0c;如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。 同种类称为同等级&#xff0c;也就是说&#xff1a;工厂方法模式中只考虑生产同等级的产品&#xff0c;但是在现实生…...

Apache服务Rwrite功能使用

Rewrite也称为规则重写&#xff0c;主要功能是实现浏览器访问时&#xff0c;URL的跳转。其正则表达式是基于Perl语言。要使用rewrite功能&#xff0c;Apache服务器需要添加rewrite模块。如果使用源码编译安装&#xff0c;–enable-rewrite。有了rewrite模块后&#xff0c;需要在…...

【一起来学kubernetes】6、kubernetes基本概念区分

前言 前一篇文章我们对k8s中的一些常见概念进行了一个梳理&#xff0c;接下来我们将常见一些概念的区别和联系进行一个理解 service和deployment的区别和联系 在Kubernetes中&#xff0c;Service和Deployment是两个不同的概念&#xff0c;它们之间存在一定的关联。 Deployme…...

Python基础入门例程66-NP66 增加元组的长度(元组)

最近的博文: Python基础入门例程65-NP65 名单中出现过的人(元组)-CSDN博客 Python基础入门例程64-NP64 输出前三同学的成绩(元组)-CSDN博客 Python基础入门例程63-NP63 修改报名名单(元组)-CSDN博客 目录 最近的博文: 描述...

ubuntu22.04 安装 jupyterlab

JupyterLab Install JupyterLab with pip: pip install jupyterlabNote: If you install JupyterLab with conda or mamba, we recommend using the conda-forge channel. Once installed, launch JupyterLab with: jupyter lab...

探索移动端可能性:Capacitor5.5.1和vue2在Android studio中精细融合

介绍&#xff1a; 移动应用开发是日益复杂的任务&#xff0c;本文将带领您深入探索如何无缝集成Capacitor5.5.1、Vue2和Android Studio&#xff0c;以加速您的开发流程Capacitor 是一个用于构建跨平台移动应用程序的开源框架。Vue 是一个流行的 JavaScript 框架&#xff0c;用…...

【深度学习】Python快捷调用InsightFace人脸检测,纯ONNX推理

pypi资料&#xff1a; https://pypi.org/project/insightface/ 模型选择&#xff1a; https://github.com/deepinsight/insightface/tree/master/python-package#model-zoo onnxruntime的GPU对应CUDA &#xff1a; https://onnxruntime.ai/docs/reference/compatibility …...

JAVA序列化和反序列化

JAVA序列化和反序列化 文章目录 JAVA序列化和反序列化序列化什么是序列化&#xff1f;为什么要进行序列化?如何将对线进行序列化具体实现过程 完整代码 序列化 什么是序列化&#xff1f; 就是将对象转化为字节的过程 为什么要进行序列化? 让数据更高效的传输让数据更好的…...

基于浣熊算法优化概率神经网络PNN的分类预测 - 附代码

基于浣熊算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于浣熊算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于浣熊优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…...

uni-app打包后,打开软件时使其横屏显示

找到page.json文件&#xff0c;在global加入以下代码&#xff1a; 这样就可以横屏显示了。...

MYSQL基础知识之【创建,删除,选择数据库】

文章目录 前言MySQL 创建数据库使用 mysqladmin 创建数据库使用 PHP脚本 创建数据库 MySQL 删除数据库使用 mysqladmin 删除数据库使用PHP脚本删除数据库 MySQL 选择数据库从命令提示窗口中选择MySQL数据库使用PHP脚本选择MySQL数据库 后言 前言 hello world欢迎来到前端的新世…...

关于 token 和证书

关于 token 和证书 在网络检测中&#xff0c;Token通常是指一种特殊的令牌&#xff0c;用于在分布式系统中进行资源控制和访问管理。Token可以用于验证客户端的身份、限制客户端的访问权限以及控制客户端对某些资源的使用。 在网络检测中&#xff0c;Token通常用于以下几个方…...

代码随想录算法训练营 Day40 | 动态规划 part13

647. 回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 class Solution { public:int countSubstrings(string s) {int n s.size();vecto…...

Word报告自动化:用poi-tl的Markdown插件优雅生成多级标题并自动更新目录(Office版)

Word报告自动化&#xff1a;用poi-tl实现Markdown式标题管理与智能目录生成 在技术文档编写领域&#xff0c;我们常常陷入这样的困境&#xff1a;内容创作者更习惯用Markdown的简洁语法表达结构&#xff0c;而最终交付却不得不妥协于Word的复杂样式调整。poi-tl的MarkdownRende…...

CILQR:自动驾驶约束优化的突破性算法实现指南 [特殊字符]

CILQR&#xff1a;自动驾驶约束优化的突破性算法实现指南 &#x1f697; 【免费下载链接】Constrained_ILQR 项目地址: https://gitcode.com/gh_mirrors/co/Constrained_ILQR 在自动驾驶技术快速发展的今天&#xff0c;约束迭代线性二次调节器&#xff08;Constrained …...

LabVIEW颜色识别实战:用IMAQ ColorMatch函数5分钟搞定产品颜色分拣

LabVIEW工业级颜色分拣系统实战&#xff1a;从参数调优到产线部署全解析 在一条高速运转的自动化生产线上&#xff0c;不同颜色的零件正以每秒3个的速度通过传送带。传统人工分拣不仅效率低下&#xff0c;误差率更是高达15%。而借助LabVIEW的IMAQ视觉工具包&#xff0c;我们仅用…...

5 款 AI 写论文哪个好?2026 实测:真文献 + 实图表,虎贲等考 AI 成毕业论文首选

毕业季选 AI 写论文工具&#xff0c;最纠结的莫过于 “5 款 AI 写论文哪个好”—— 通用 AI 文献造假、轻量工具功能残缺、专项平台适配不足&#xff0c;能同时满足真实文献、可溯源数据、学术规范图表、全流程写作的工具少之又少。经过对 5 款主流 AI 论文工具的深度实测&…...

Pymol科研绘图:从AlphaFold预测结构到发表级图片,我的完整工作流分享

Pymol科研绘图&#xff1a;从AlphaFold预测结构到发表级图片&#xff0c;我的完整工作流分享 在结构生物学和药物设计领域&#xff0c;一张清晰的蛋白质结构图往往胜过千言万语。作为实验室里"出图率"最高的软件之一&#xff0c;Pymol的强大功能常被初学者低估——它…...

Windows Cleaner终极指南:3步彻底解决C盘爆红问题

Windows Cleaner终极指南&#xff1a;3步彻底解决C盘爆红问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到Windows系统盘空间不足的警告&#x…...

APISIX Dashboard实战:从零构建微服务路由网关

1. 认识APISIX Dashboard&#xff1a;你的微服务交通指挥官 第一次接触APISIX Dashboard时&#xff0c;我把它想象成一个繁忙机场的空中交通管制塔台。就像塔台需要协调无数航班起降一样&#xff0c;这个可视化面板能帮你管理所有进出微服务集群的网络请求。不同于需要手写YAML…...

RexUniNLU技术解析:Rex架构如何通过共享表征实现多任务泛化

RexUniNLU技术解析&#xff1a;Rex架构如何通过共享表征实现多任务泛化 1. 引言&#xff1a;从“一事一模型”到“一模型万事” 如果你接触过自然语言处理&#xff08;NLP&#xff09;&#xff0c;可能会发现一个有趣的现象&#xff1a;想识别文本里的人名地名&#xff0c;得…...

研一在雁栖湖,研二在中关村:中科院网信中心读研的真实体验与避坑指南

研一在雁栖湖&#xff0c;研二在中关村&#xff1a;中科院网信中心读研的真实体验与避坑指南 第一次踏入雁栖湖校区时&#xff0c;湖面泛起的粼粼波光与远处连绵的青山构成了一幅令人屏息的画面。作为中科院计算机网络信息中心&#xff08;以下简称"网信中心"&#x…...