当前位置:

首页 > 编程开发 > Redis高可用的两种实现方案是什么

Redis高可用的两种实现方案是什么

Redis Assistant
Redis Assistant

Redis Assistant 是一款为Redis设计的高效可视化管理与监控工具,提供多种操作模式,高效处理服务器数据。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

立即下载
¥19
Windows/macOS/Linux 2026-08-22
正版软件 Windows macOS软件 Linux 数据库管理工具

Redis中为了实现高可用(HighAvailability,简称HA),采用了如下两个方式:主从复制数据。采用哨兵监控数据节点的运行情况,一旦主节点出现问题由从节点顶上继续进行服务。主从复制Redis中主从节点复制数据有全量复制和部分复制之分。旧版本全量复制功能的实现全量复制使用snyc命令来实现,其流程是:从服务器向主服务器发送sync命令。主服务器在收到sync命令之后,调用bgsave命令生成***的rdb文件,将这个文件同步给从服务器,这样从服务器载入这个rdb文件之后,状态就会和主服务器执行b

本文目录

    Redis中为了实现高可用(High Availability,简称HA),采用了如下两个方式:

    • 主从复制数据。

    • 采用哨兵监控数据节点的运行情况,一旦主节点出现问题由从节点顶上继续进行服务。

    主从复制

    Redis中主从节点复制数据有全量复制和部分复制之分。

    旧版本全量复制功能的实现

    全量复制使用snyc命令来实现,其流程是:

    旧版本全量复制功能,其***的问题是从服务器断线重连时,即便在从服务器上已经有一部分数据了,也需要进行全量复制,这样做的效率很低,于是新版本的Redis在这部分做了改进。

    新版本全量复制功能的实现

    新版本Redis使用psync命令来代替sync命令,该命令既可以实现完整全同步也可以实现部分同步。

    复制偏移量

    执行复制的双方,主从服务器,分别会维护一个复制偏移量:

    • 主服务器每次向从服务器同步了N字节数据之后,将修改自己的复制偏移量+N。

    • 从服务器每次从主服务器同步了N字节数据之后,将修改自己的复制偏移量+N。

    复制积压缓冲区

    主服务器内部维护了一个固定长度的先进先出队列做为复制积压缓冲区,其默认大小为1MB。

    在主服务器进行命令传播时,不仅会将写命令同步到从服务器,还会将写命令写入复制积压缓冲区。

    服务器运行ID

    每个Redis服务器,都有其运行ID,运行ID由服务器在启动时自动生成,主服务器会将自己的运行ID发送给从服务器,而从服务器会将主服务器的运行ID保存起来。

    从服务器Redis断线重连之后进行同步时,就是根据运行ID来判断同步的进度:

    • 如果从服务器上面保存的主服务器运行ID与当前主服务器运行ID一致,则认为这一次断线重连连接的是之前复制的主服务器,主服务器可以继续尝试部分同步操作。

    • 否则,如果前后两次主服务器运行ID不相同,则认为是完成全同步流程。

    psync命令流程

    有了前面的准备,下面开始分析psync命令的流程:

    前面两种情况主服务器收到psync命令之后,会出现以下三种可能:

    哨兵机制概述

    Redis使用哨兵机制来实现高可用(HA),其大概工作原理是:

    • Redis使用一组哨兵(sentinel)节点来监控主从redis服务的可用性。

    • 一旦发现Redis主节点失效,将选举出一个哨兵节点作为***(leader)。

    • 哨兵***再从剩余的从Redis节点中选出一个Redis节点作为新的主Redis节点对外服务。

    以上将Redis节点分为两类:

    • 哨兵节点(sentinel):负责监控节点的运行情况。

    • 数据节点:即正常服务客户端请求的Redis节点,有主从之分。

    以上是大体的流程,这个流程需要解决以下几个问题:

    • 如何对Redis数据节点进行监控?

    • 如何确定一个Redis数据节点失效?

    • 如何选择出一个哨兵***节点?

    • 哨兵节点选择新的主Redis节点的依据是什么?

    以下来逐个回答这些问题。

    三个监控任务

    哨兵节点通过三个定时监控任务监控Redis数据节点的服务可用性。

    info命令

    每隔10秒,每个哨兵节点都会向主、从Redis数据节点发送info命令,获取新的拓扑结构信息。

    Redis拓扑结构信息包括了:

    • 本节点角色:主或从。

    • 主从节点的地址、端口信息。

    这样,哨兵节点就能从info命令中自动获取到从节点信息,因此那些后续才加入的从节点信息不需要显式配置就能自动感知。

    向__sentinel__:hello频道同步信息

    每隔2秒,每个哨兵节点将会向Redis数据节点的__sentinel__:hello频道同步自身得到的主节点信息以及当前哨兵节点的信息,由于其他哨兵节点也订阅了这个频道,因此实际上这个操作可以交换哨兵节点之间关于主节点以及哨兵节点的信息。

    这一操作实际上完成了两件事情: * 发现新的哨兵节点:如果有新的哨兵节点加入,此时保存下来这个新哨兵节点的信息,后续与该哨兵节点建立连接。 * 交换主节点的状态信息,作为后续客观判断主节点下线的依据。

    向数据节点做心跳探测

    每隔1秒,每个哨兵节点向主、从数据节点以及其他sentinel节点发送ping命令做心跳探测,这个心跳探测是后续主观判断数据节点下线的依据。

    主观下线和客观下线

    主观下线

    上面三个监控任务中的第三个探测心跳任务,如果在配置的down-after-milliseconds之后没有收到有效回复,那么就认为该数据节点“主观下线(sdown)”。

    为什么称为“主观下线”?因为在一个分布式系统中,有多个机器在一起联动工作,网络可能出现各种状况,仅凭一个节点的判断还不足以认为一个数据节点下线了,这就需要后面的“客观下线”。

    客观下线

    当一个哨兵节点认为主节点主观下线时,该哨兵节点需要通过”sentinel is-master-down-by addr”命令向其他哨兵节点咨询该主节点是否下线了,如果有超过半数的哨兵节点都回答了下线,此时认为主节点“客观下线”。

    选举哨兵***

    当主节点客观下线时,需要选举出一个哨兵节点做为哨兵***,以完成后续选出新的主节点的工作。

    这个选举的大体思路是:

    • 每个哨兵节点通过向其他哨兵节点发送”sentinel is-master-down-by addr”命令来申请成为哨兵***。

    • 而每个哨兵节点在收到一个”sentinel is-master-down-by addr”命令时,只允许给***个节点投票,其他节点的该命令都会被拒绝。

    • 如果一个哨兵节点收到了半数以上的同意票,则成为哨兵***。

    • 如果前面三步在一定时间内都没有选出一个哨兵***,将重新开始下一次选举。

    可以看到,这个选举***的流程很像raft中选举leader的流程。

    选出新的主节点

    在剩下的Redis从节点中,按照以下顺序来选择新的主节点:

    • 过滤掉“不健康”的数据节点:比如主观下线、断线的从节点、五秒内没有回复过哨兵节点ping命令的节点、与主节点失联的从节点。

    • 选择slave-priority(从节点优先级)***的从节点,如果存在则返回不存在则继续后面的流程。

    • 选择复制偏移量***的从节点,这意味着这个从节点上面的数据最完整,如果存在则返回不存在则继续后面的流程。

    • 到了这里,所有剩余从节点的状态都是一样的,选择runid最小的从节点。

    提升新的主节点

    选择了新的主节点之后,还需要***的流程让该节点成为新的主节点:

    • 哨兵***向上一步选出的从节点发出“slaveof no one”命令,让该节点成为主节点。

    • 哨兵***向剩余的从节点发送命令,让它们成为新主节点的从节点。

    • 哨兵节点集合会将原来的主节点更新为从节点,当其恢复之后命令它去复制新的主节点的数据。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    php72w redis,docker php7安装php-redis
    php72w redis,docker php7安装php-redis

    在Docker环境下为PHP安装Redis扩展:手动编译需下载源码、安装phpize、配置编译并安装,生成redis.so并在php.d目录新建redis.ini加载,重启PHP-FPM;也可直接yum安装php72w-pecl-redis,免手动编译。

    php 如何配置 redis,php 如何设置redis
    php 如何配置 redis,php 如何设置redis

    配置PHP的Redis扩展:先安装Redis服务,从GitHub下载phpredis源码,用phpize编译安装,修改php.ini添加extension=redis.so,重启php-fpm或Apache,通过phpinfo验证并连接Redis。

    c++如何将结构体序列化为Redis兼容的RESP协议格式【深度】
    c++如何将结构体序列化为Redis兼容的RESP协议格式【深度】

    C++结构体无法直接序列化为RESP协议,需手动将字段映射为*N数组嵌套$lenbulkstring形式。整数需转换为字符串并加:前缀,空字符串用$0\r\n,null用$-1\r\n。长度计算需精确到字节数,特别注意二进制安全,同时确保字段顺序与结构体定义一致。

    如何在Golang架构中部署Redict作为高能数据临时存储中转站
    如何在Golang架构中部署Redict作为高能数据临时存储中转站

    Redis作为跨服务临时状态枢纽,需按消息队列、缓存和原子状态三重角色设计。选型用List实现任务分发及延迟重试,Stream用于事件广播与位点回溯。go-redis/v8需配置MinIdleConns、MaxRetries及超时。数据写入应JSON序列化并带type标签、设合理TTL、将关键字段提至顶层。消费通过原子GET+DEL或processedkey

    TP8.0 高并发下库存超卖?Redis 原子递减结合数据库乐观锁控制
    TP8.0 高并发下库存超卖?Redis 原子递减结合数据库乐观锁控制

    在高并发秒杀场景下,利用Redis的减库存原子操作预扣减库存拦截超卖请求,再通过数据库乐观锁(版本号与库存校验)确保最终一致性,异常时回滚Redis库存并借助Lua脚本保证原子性,从而有效防止库存超卖。

    如何在 Go 中利用 go-redis 执行 Lua 脚本优化逻辑
    如何在 Go 中利用 go-redis 执行 Lua 脚本优化逻辑

    在Go中使用go-redis执行Lua脚本可借助原子性解决竞态问题,通过redis.Script封装脚本并自动处理SHA1缓存与重试。需注意KEYS必须为非空切片且所有键在Cluster模式下落在同一slot,ARGV以字符串传入并由tonumber转换。返回值需先检查错误再调用Val(),避免panic。

    TP6.0 基于 Redis SetNX 实现的简单互斥锁机制【并发】
    TP6.0 基于 Redis SetNX 实现的简单互斥锁机制【并发】

    先看一个典型场景:电商秒杀、库存扣减、定时任务重复调度——这些并发冲突在 TP6 应用里屡见不鲜。用 Redis 的 SETNX 做互斥锁,确实是轻量又直接的方案,但“能用”和“稳妥”之间,隔着三层硬功夫:原子加锁、身份校验、合理超时。这三条,差一条就翻车。 很多人第一次上手,直接写 SETNX 加

    TP6.0 如何处理高并发抢购?Redis 原子锁与队列削峰详解【秒杀】
    TP6.0 如何处理高并发抢购?Redis 原子锁与队列削峰详解【秒杀】

    高并发抢购中,Redis的DECR原子操作可安全扣库存;配合think-queue异步削峰,接口仅扣库存和推消息;分布式锁需用SETNXEX加唯一标识,释放时用Lua脚本校验;成功资格后须以数据库事务双写为准,失败时补回Redis库存。

    Golang 实现基于 Redis 的延时任务队列
    Golang 实现基于 Redis 的延时任务队列

    基于Redis的ZSET实现延时队列需解决并发重复消费、失败重试混乱、精度不足及内存爆炸等问题。通过Lua脚本保证取删原子性,使用毫秒级时间戳,对临时错误采用指数退避重试,永久错误记入独立哈希表,并限制最大延迟、定期清理过期任务、使用紧凑序列化格式。

    RedisInsight怎么修改Key的过期时间 Redis操作方法【步骤】
    RedisInsight怎么修改Key的过期时间 Redis操作方法【步骤】

    操作 Redis 的时候,改个 Key 的过期时间其实是个高频场景。特别是做运维排查或者临时调试那会儿,谁也不想反复切命令行窗口、背那些命令参数。好在 RedisInsight 这个图形工具把这事儿做得很顺手——三种方式任选,总有一种合你胃口。 在动手前,先确认一下 Key 当前的 TTL 状态是个

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?