---
title: Redis单点故障问题
published: 2025-09-13
description: ''
image: ''
tags: ['Redis','单点故障']
category: '中间件 > Redis'
draft: false 
lang: ''
---

# 单点故障问题

单台Redis实现分布式锁存在单点故障问题，如果采用主从读写分离架构，如果一个客户端在主节点上锁成功，但是主节点突然宕机，由于主从延迟导致节点还没有同步到这个锁，此时可能有另一个客户端抢到新晋升的主节点，这个时候会导致两个客户端抢到了锁，产生数据不一致。

# 红锁
红锁基本思想：
- 部署多个Redis实例（通常5个）
- 客户端在大多数实例（至少3个）上请求锁，并在一定时间内获得成功，表示加锁成功。
- 使用RedLock可以提供更高的容错性，即使部分Redis实例故障，仍然能获得锁。

## 红锁实现步骤
- 客户端尝试在每个Redis实例上加锁，必须在有限时间内完成所有实例的加锁。
- 如果大多数实例（N / 2 + 1）加锁成功，就表示加锁成功。
- 否则，客户端将会释放所有已经加锁的实例，重新尝试。

## 红锁缺点
- 复杂性： 实现ReadLock要多个Redis实例，会增加复杂性。
- 性能： 需要多个Redis实例，会增加性能开销。
- 可靠性： 需要多个Redis实例，会增加可靠性开销。
- 成本： 需要多个Redis实例，会增加成本。

