一、Redis 介绍

Redis 支持单机、主从、哨兵、集群多种架构模式,是高性能的内存 KV 存储,常用于缓存、会话、排行榜、分布式锁等场景。

1.1、单机模式

单机模式即安装一个 Redis 实例直接使用,适合开发环境或对高可用要求不高的简单应用。

优点

  • 部署简单
  • 成本低,无备用节点
  • 高性能,无需同步,读写一致性好

缺点

  • 单节点宕机即不可用
  • 性能受限于单机 CPU(Redis 单线程处理命令)

单机 Redis QPS 约数万,取决于命令复杂度。千万级并发需通过主从或集群扩展。

1.2、主从复制

Redis Replication 允许从一个 Master 创建多个 Slave。主从网络正常时,Master 将写操作同步给 Slave,数据单向流动:Slave 只读不写。

优点

  1. Master/Slave 方便水平扩展读 QPS,增加 Slave 即可
  2. 降低 Master 读压力
  3. Master 宕机时 Slave 可顶上(需人工切换)

缺点

  1. Master 故障时无法自动切换,写服务中断
  2. 未分担 Master 写压力
  3. 主节点宕机后需人工修改应用主节点地址并重新复制
  4. 读写能力受单机限制

1.3、哨兵模式

Sentinel 基于主从架构,监控 Master 和 Slave 健康状态,Master 故障时自动选举新 Master 并通知客户端。

优点

  • 继承主从所有优点
  • 主从自动切换,可用性更高
  • 异常时可通过 API 发送告警

缺点

  • 主从切换期间可能丢数据(异步复制)
  • 仍未解决写压力和存储上限
  • 集群在线扩容较复杂

1.4、集群模式

数据按 Slot(16384 个槽)分片到多个节点,突破单机存储和性能上限。

优点

  • 无中心架构,节点对等
  • 可动态增删节点,调整数据分布
  • 部分节点故障时集群仍可用
  • 通过 Slave 备份 + gossip 协议 + 投票完成故障转移

缺点

  • 异步复制,无法保证强一致
  • 搭建相对复杂(Docker 可简化)

二、持久化

RDB(快照)

定时或满足条件时将内存数据 dump 到磁盘。恢复快,但两次快照间的数据可能丢失。

save 900 1 # 900 秒内至少 1 次修改
save 300 10
save 60 10000

AOF(追加日志)

记录每条写命令,重启时重放。可配置 appendfsync

  • always:每条命令刷盘,最安全最慢
  • everysec:每秒刷盘,默认,折中方案
  • no:由 OS 决定,最快但可能丢数据

生产环境常开启 AOF + RDB 混合持久化(Redis 4.0+)。

三、过期策略与淘汰

过期删除

  • 惰性删除:访问 key 时检查是否过期
  • 定期删除:每隔一段时间随机抽查一批 key

内存淘汰(maxmemory-policy)

内存达上限时按策略淘汰:

  • volatile-lru:在设了过期时间的 key 中 LRU 淘汰
  • allkeys-lru:所有 key 中 LRU 淘汰(缓存常用)
  • noeviction:不淘汰,写入返回错误

四、常见使用场景

场景数据结构
缓存String + 过期时间
排行榜Sorted Set
去重 / 共同好友Set
消息队列List / Stream
分布式锁String + SET NX EX
签到统计Bitmap