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

如何保证Redis的HA高可用

目录

  • 1.关于Redis
  • 2.Redis 的使用场景
  • 3.Redis的高可用
    • 3.1 哨兵模式(Sentinel)
    • 3.2 集群模式(Cluster)
  • 4.参考

本文主要介绍Redis如何保证高可用。

1.关于Redis

Redis(Remote Dictionary Server)是一个开源的,基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

Redis支持多种类型的数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)以及位图(Bitmaps)、HyperLogLogs和地理空间索引半径查询等。

Redis具有以下特性:

  1. 性能高效:由于所有数据都存储在内存中,因此Redis能提供高速的读写速率。
  2. 持久化:Redis可以将内存中的数据持久化到磁盘,用于防止数据丢失。
  3. 支持多种数据结构:Redis支持多种数据结构,可以满足不同的数据存储需求。
  4. 支持事务:Redis支持事务,可以保证一系列命令的原子性。
  5. 支持发布订阅模式:Redis支持发布订阅模式,可以用于实现消息队列。
  6. 支持Lua脚本:Redis支持Lua脚本,可以在服务器端执行复杂的操作。
  7. 支持主从复制:Redis支持主从复制,可以用于数据备份或提高读取性能。
  8. 支持高可用和分区:通过Redis Sentinel和Redis Cluster,Redis支持高可用和数据分区。

2.Redis 的使用场景

Redis可以用于多种场景,以下是一些常见的用途:

  1. 缓存系统:由于Redis的高性能和丰富的数据结构,它经常被用作缓存系统,可以有效地减少对后端数据库的访问,提高应用的响应速度。
  2. 消息队列:Redis的发布订阅功能可以用来实现消息队列,用于在不同的应用程序之间异步传递消息。
  3. 排行榜:Redis的有序集合(Sorted Sets)非常适合用来实现排行榜功能,可以快速地获取排名和分数,并实时更新。
  4. 会话缓存:Redis可以用来存储Web应用的会话信息,比如用户的登录状态、购物车信息等。
  5. 实时分析:Redis的快速读写和丰富的数据结构使得它非常适合用来进行实时分析,例如统计网站的访问量、用户行为等。
  6. 地理空间数据:Redis的地理空间索引可以用来存储地理位置信息,并进行位置的查询和距离计算。
  7. 计数器:Redis的INCR和DECR命令可以用来实现计数器功能,例如统计网站的点击量、下载量等。
  8. 分布式锁:Redis可以用来实现分布式锁,用于在分布式环境中对资源的互斥访问。

以上只是Redis的一部分用途,由于Redis的灵活性和高性能,它可以用于更多的场景。

Redis有丰富的应用场景,保证其高可用,是重中之重。
接下来介绍 Redis 高可用。

3.Redis的高可用

Redis的高可用主要是两种:哨兵模式(Sentinel) 和 集群模式(Cluster)。

3.1 哨兵模式(Sentinel)

Redis Sentinel是Redis官方推荐的高可用解决方案,它可以监控Redis主从服务器,进行故障转移,以及发送通知。

Redis主从复制,可以将一个Redis服务器的数据复制到一个或多个Redis服务器,在配置文件中,使用slaveof指令指定主节点的IP地址和端口。
slaveof <masterip> <masterport>

Redis Sentinel 配置过程如下:

首先需要在每个Sentinel节点上创建一个配置文件,例如sentinel.conf,并设置监控的Redis服务器,以及其他选项。

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000

其中,mymaster是主服务器的名称,
127.0.0.1 6379是主服务器的地址和端口,
2是判断主服务器失效所需的Sentinel数量,5000是判断主服务器失效的超时时间,10000是故障转移的超时时间。

然后使用配置文件启动每个Sentinel节点。

redis-sentinel ./sentinel.conf

3.2 集群模式(Cluster)

Redis Cluster是Redis的分布式解决方案,它可以自动将数据分片,进行故障转移,以及重新分配分片。

  1. 数据分片:Redis Cluster将所有的数据分成16384个槽(slot),每个槽对应一部分键。每个Redis节点负责一部分槽,也就是一部分数据。当需要获取或设置一个键的值时,Redis Cluster会根据键的哈希值计算出对应的槽,然后找到负责这个槽的节点。这种方式可以将数据均匀地分布在所有的节点上,提高存储和处理的效率。
  2. 故障检测:Redis Cluster的每个节点都会定期与其他节点进行通信,检查其他节点的状态。这种通信是通过Gossip协议实现的,每个节点都会定期地向其他节点发送ping消息,如果在指定的时间内没有收到回应,那么这个节点会被标记为失效。
  3. 故障转移:当一个节点被标记为失效后,Redis Cluster会选择一个从节点来接管失效节点的数据。这个从节点会被提升为主节点,并接管失效节点的所有槽。在故障转移过程中,Redis Cluster可能会拒绝部分写操作,以保证数据的一致性。这个过程是自动进行的,不需要人工干预。
  4. 数据一致性:Redis Cluster使用异步复制,但是在进行故障转移时,会尽可能地保证数据的一致性。当一个主节点失效时,只有当至少一个从节点完成了数据同步,才会进行故障转移。这样可以保证在主节点失效后,至少有一个从节点拥有最新的数据。

上面提到Gossip协议,这里简单介绍下。

在Redis Cluster中,Gossip协议主要用于节点之间的信息交换,包括节点的发现、故障检测和配置信息的传播。

  1. 节点发现:新加入的节点通过Gossip协议可以快速地被集群中的其他节点发现,同时,已经存在的节点也可以通过Gossip协议发现新加入的节点。
  2. 故障检测:节点通过定期向其他节点发送ping消息,并等待pong回复来检测其他节点的状态。如果在一定时间内没有收到pong回复,那么该节点会被标记为失效。
  3. 配置信息传播:节点之间可以通过Gossip协议传播配置信息,例如节点的角色(主节点或从节点)、数据槽的分配情况等。
    Gossip协议是一种基于"流言"传播的信息交换协议,它可以在大规模分布式系统中实现高效的信息交换。在Redis Cluster中,Gossip协议是实现节点管理和故障转移的重要机制。

Redis Cluster 配置过程如下:

在每个Redis节点上创建一个配置文件,例如redis.conf,并设置cluster-enabled为yes,以及其他选项。

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

然后使用redis-cli工具创建Cluster。

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

以上是保证Redis高可用的基本方法,具体的配置和使用可以根据实际需求进行调整。在实际使用中,可能还需要考虑其他因素,例如网络分区、数据一致性等

4.参考

Redis文档

Redis的所有官方文档,包括快速入门指南、命令参考、主题指南等。你可以在这里找到关于Redis的所有信息,包括安装、配置、使用方法等。

相关文章:

如何保证Redis的HA高可用

目录 1.关于Redis2.Redis 的使用场景3.Redis的高可用3.1 哨兵模式&#xff08;Sentinel&#xff09;3.2 集群模式&#xff08;Cluster&#xff09; 4.参考 本文主要介绍Redis如何保证高可用。 1.关于Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的…...

第一百六十三回 如何在任意位置显示PopupMenu

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了PopupMenuButton相关的内容&#xff0c;本章回中将介绍如何在任意位置显示PopupMenu.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在上一章回中介绍了PopupMenuButton相关的内容&#xff0c;它主…...

采用python中的opencv2的库来运用机器视觉移动物体

一. 此次我们来利用opencv2来进行机器视觉的学习 1. 首先我们先来进行一个小的案例的实现. 这次我们是将会进行一个小的矩形手势的移动. import cv2 from cvzone.HandTrackingModule import HandDetectorcap cv2.VideoCapture(0) # cap.set(3, 1280) # cap.set(4, 720) col…...

一、thymeleaf简介

1.1 什么是thymeleaf Thymeleaf是一个适用于web和独立环境的现代服务器端Java模板引擎&#xff0c;能够处理HTML、XML、JavaScript、CSS甚至纯文本。主要目标是提供一种优雅且高度可维护的创建模板的方法。 何为模板引擎呢&#xff1f;模板引擎就是为了使用户页面和业务数据…...

二分查找模版

对于一个递增序列我们要找大于等于target的数&#xff0c;返回结果的下标时 比如 序列 5 7 7 8 8 10 初始化左右指针l0 rn-1 猜测区间 [l,r] 闭区间&#xff0c;mid(lr)/2 防溢出就写成 midl(r-l)/2 如果有nums[mid]<target 那么[l,mid]这个区间的数就都小于target 更新 lmi…...

idea清空缓存类

解决办法 网上有很多是让你去清空什么maven依赖&#xff0c;但假如这个项目是你不可以大刀阔斧的话 可以清空idea缓存 选择 Invalidate 开头的 然后全选 运行重启idea OK...

PAT(Basic Level) Practice(中文) 1015德才论

前言 ※ PTA是 程序设计类实验辅助教学平台 &#xff0c;里边包含一些编程题目集以供练习。 这道题用java解&#xff0c;我试了三种解法&#xff0c;不断优化&#xff0c;但始终是三个测试点通过、三个测试点超时。我把我的代码放在这里&#xff0c;做个参考吧。 1015 德才…...

接口自动化测试的概述及流程梳理~

接下来开始学习接口自动化测试。 因为之前从来没接触过&#xff0c;所以先了解一些基础知识。 1.接口测试的概述 2.接口自动化测试流程。 接口测试概述 接口&#xff0c;又叫API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;&a…...

竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…...

虚拟货币(也称为加密货币或数字货币)的运作

虚拟币发展史 虚拟币的发展史可以追溯到20世纪末和21世纪初&#xff0c;以下是虚拟币的重要发展节点&#xff1a; 1998年&#xff1a;比特币白皮书的发布 比特币的概念最早由中本聪&#xff08;Satoshi Nakamoto&#xff09;在1998年提出&#xff0c;随后在2008年发布了一份名…...

N. Number Reduction

Problem - 1765N - Codeforces 发现如果是无前导0最小数那么在保证删除k个数时第1位是最小的&#xff0c;第二位一定是相对最小的&#xff0c;且答案第一位和第二位在原位置的间隔是小于等于还可以删除的位数的。 因此&#xff0c;对于原数字长度位n&#xff0c;要删除k&#…...

Java集合面试题

一、Java集合面试题 1.LinkedHashMap底层原理&#xff1f; HashMap是无序的&#xff0c;迭代HashMap所得到元素的顺序并不是它们最初放到HashMap的顺序&#xff0c;即不能保持它们的插入顺序。 LinkedHashMap继承于HashMap&#xff0c;是HashMap和LinkedList的融合体&#x…...

Python 编程基础 | 第三章-数据类型 | 3.5、列表

一、列表 1、创建列表 序列是Python中最基本的数据结构&#xff0c;Python有6个序列的内置类型&#xff0c;但最常见的是列表和元组。序列都可以进行的操作包括索引&#xff0c;切片&#xff0c;加&#xff0c;乘&#xff0c;检查成员。此外&#xff0c;Python已经内置确定序列…...

Spring Cloud Zuul 基本原理

Spring Cloud Zuul 底层是基于Servlet实现的&#xff0c;核心是通过一系列的ZuulFilter来完成请求的转发。 1、核心组件注册 1.1. EnableZuulProxy注解 启用Zuul作为微服务网关&#xff0c;需要在Application应用类加上EnableZuulProxy注解&#xff0c;而该注解核心是利用Im…...

QT实现TCP服务器客户端的实现

ser&#xff1a; widget.cpp&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时&#xf…...

行为型设计模式——责任链模式

摘要 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象。 一、责任链模式意图 职责链模式&#xff08;Chain Of Responsibility&#xff09; 是一种行为设…...

window安装压缩版postgresql

环境&#xff1a; window 11 专业版postgresql-16.0-1-windows-x64-binaries.zip 一、下载 1.1 从官网下载 https://www.postgresql.org/download/windows/ 1.2 从百度网盘下载 链接&#xff1a;https://pan.baidu.com/s/1fmQbgWSzX4hN07Lgdzfz0g?pwddzyy 提取码&#…...

数组(数据结构)

优质博文&#xff1a;IT-BLOG-CN 一、简介 数组Array是一种线性表数据结构&#xff0c;它用一组连续的内存空间&#xff0c;存储一组具有相同类型的数据。 数组因具有连续的内存空间的特点&#xff0c;数据拥有非常高效率的“随机访问”&#xff0c;时间复杂度为O(1)。但因要保…...

C/C++ 二分查找面试算法题

1.二分查找&#xff08;有序数组&#xff09; https://blog.csdn.net/qq_63918780/article/details/122527681 1 #include <stdio.h>2 #include <string.h>3 4 int func(int *a,int j,int x)5 {6 int len j - 1,i 0,min;7 while(i<len)8 {9 …...

Linux基本指令(上)——“Linux”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容是Linux啦&#xff01;&#xff01;&#xff01;主要是Linux的一些基本指令和Linux相关的基本概念&#xff08;系统层面&#xff09;&#xff0c;下面&#xff0c;让我们进入Linux的世界吧&#xff01;&#xff01;…...

XSS详解

XSS一些学习记录 XXS短标签、属性、事件、方法短标签属性事件函数弹窗函数一些对于绕过有用的函数一些函数使用payload收集 浏览器编码问题XML实体编码URL编码JS编码混合编码 一些绕过方法利用constructor原型污染链构造弹框空格绕过圆括号过滤绕过其他的一些绕过 参考 XXS短标…...

【图论】判环问题

&#xff08;未更新完、做到相关题再更新相关部分 文章目录 无向图判断有无环并输出环上点 无向图判断有无环并输出环上点 例题&#xff1a;H. Mad City 利用变种拓扑排序&#xff0c;先把度为1的点存入队中&#xff0c;每次取出队头&#xff0c;遍历邻接点&#xff0c;再将该…...

将3D MAX设计模型导入NX1988

将3D MAX设计模型导入NX1988 概述导入流程导出喜欢的模型对模型进行修改模型贴图 概述 一般家装设计都不会用NX之类的产品设计软件&#xff0c;也没有通用的文件格式可以互相转换&#xff0c;本文的目的是将从网上下载的一些设计较好的3D MAX模型导入到NX软件中借用&#xff0…...

操作系统原理实验三:页面调度算法程序

实验三&#xff1a;页面调度算法程序 课程名称&#xff1a;操作系统原理 项目名称&#xff1a;页面调度算法程序 实验&#xff08;实训&#xff09;类型&#xff1a;验证性实验 实验&#xff08;实训&#xff09;课时&#xff1a;2 [目的和要求] 目的&#xff1a; 加深对请…...

QT实现tcp服务器客户端

服务器.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时&#xff0c;服务器已经成功进入监听状态…...

tcp拥塞控制原理

18.3 拥塞控制 我们在向对端发送数据时&#xff0c;并不是一股脑子任意发送&#xff0c;因为TCP建立连接后&#xff0c;就是建立了一根管道&#xff0c;这跟管道上&#xff0c;实际上有很多的工作设备&#xff0c;比如路由器和交换机等等&#xff0c;他们都会对接收到的TCP包进…...

【C++设计模式之简单工厂模式】分析及示例

简介 简单工厂模式是一种常见的设计模式&#xff0c;用于创建多种相似对象的实例&#xff0c;属于创建型。 它通过一个工厂类来解耦客户端代码和对象的创建过程&#xff0c;使得客户端无需直接和具体的产品类交互&#xff0c;而只需要通过工厂类获取所需的产品实例即可。 原理…...

云原生定义整理

云原生定义整理 Pivotal 是云原生应用的提出者&#xff0c;并推出了 Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架&#xff0c;成为云原生应用架构中先驱者和探路者。 Pivotal最初的定义 Pivotal公司的Matt Stine在2015年写了一本叫做<<迁移到云…...

华硕X555YI, Win11下无法调节屏幕亮度

翻出一个旧电脑华硕X555YI&#xff0c;装Win11玩&#xff0c;已经估计到会有一些问题。 果然&#xff0c;装完之后&#xff0c;发现屏幕无法调节亮度。试了网上的一些方法&#xff0c;比如修改注册表等&#xff0c;无效。 估计是显卡比较老&#xff0c;哪里没兼容。然后用驱动…...

踩坑 | vue动态绑定img标签src属性的一系列报错

文章目录 踩坑 | vue项目运行后使用require()图片也不显示问题描述vue中动态设置img的src不生效问题的原因require is not defined 解决办法1&#xff1a;src属性直接传入地址解决办法2 踩坑 | vue项目运行后使用require()图片也不显示 问题描述 在网上查阅之后&#xff0c;发…...

wordpress前端用什么/浏阳廖主任打人

为什么80%的码农都做不了架构师&#xff1f;>>> 我们开发就是喜欢各种酷炫的东西&#xff0c;对于有洁癖的我&#xff0c;连命令行都不放过了 先上图看效果&#xff0c;命令行显示高亮部分 实现过程&#xff1a; 第一步&#xff1a;.bash_prompt脚本 # ~/.bash_p…...

wordpress显示id/今日最新国际新闻头条

前言 继续ctf的旅程 开始攻防世界web高手进阶区的7分题 本文是comment的writeup 解题过程 进来是个留言板 惯例查看源码和御剑扫描 源码没东西&#xff0c;但是控制台有提示 刚好后台扫到一个.git 估摸着是git泄露 用githack试试&#xff08;注&#xff1a;githacker报错…...

北京又有疫情了吗今天/seo网站编辑优化招聘

在SVM中&#xff0c;将约束问题转化成非约束问题采用到了拉格朗日乘子法。这个文章就讲一下拉格朗日乘子法与KKT约束是怎么回事。本人不是数学科班出身&#xff0c;但是也只能硬着头皮讲一讲了。从零理解现在我们要解决这样一个问题&#xff1a;这个函数距离原点最近的距离是多…...

莘县网站制作/seo竞价

说明前端 vue 框架不知不觉就这样火起来了&#xff0c;生态圈也是逐渐在完善&#xff0c;后台也是彻底分离了数据给前端&#xff0c;就类似ios 和安卓客户端一样&#xff0c;令人惊奇的是也拥有了前端路由这个概念&#xff0c;更令人兴奋的是用 webpack 打包解决了包和包依赖的…...

网站的icp 备案信息/湖州seo排名

王勃,杨炯,卢照邻,骆宾王.转载于:https://www.cnblogs.com/zhangzujin/p/4451036.html...

wordpress怎么中文/seo技术培训茂名

前言&#xff1a;最近&#xff0c;手机市场上出现了许多孪生手机或者情侣手机新品&#xff0c;其中较有代表性的如诺基亚N97和N97 Mini&#xff0c;HTC HD和HTC HD Mini&#xff0c;它们都是外观上缩小一圈的纯粹Mini版本。另外还有如HTC钻石系列&#xff0c;它们是相同体积下的…...