一、Redis 介绍
一、Redis 介绍
Redis 支持单机、主从、哨兵、集群多种架构模式,是高性能的内存 KV 存储,常用于缓存、会话、排行榜、分布式锁等场景。
1.1、单机模式
单机模式即安装一个 Redis 实例直接使用,适合开发环境或对高可用要求不高的简单应用。
优点
- 部署简单
- 成本低,无备用节点
- 高性能,无需同步,读写一致性好
缺点
- 单节点宕机即不可用
- 性能受限于单机 CPU(Redis 单线程处理命令)
单机 Redis QPS 约数万,取决于命令复杂度。千万级并发需通过主从或集群扩展。
1.2、主从复制
Redis Replication 允许从一个 Master 创建多个 Slave。主从网络正常时,Master 将写操作同步给 Slave,数据单向流动:Slave 只读不写。
优点
- Master/Slave 方便水平扩展读 QPS,增加 Slave 即可
- 降低 Master 读压力
- Master 宕机时 Slave 可顶上(需人工切换)
缺点
- Master 故障时无法自动切换,写服务中断
- 未分担 Master 写压力
- 主节点宕机后需人工修改应用主节点地址并重新复制
- 读写能力受单机限制
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 |