外观
一句话答案
Redis 支持丰富数据结构/持久化/集群/Lua 脚本;Memcached 纯内存多线程,只支持 String,更简单。
核心要点
| 维度 | 单机(Standalone) | 哨兵(Sentinel) | 集群(Cluster) |
|---|---|---|---|
| 架构 | 单节点 | 主从 + Sentinel 监控 | 多主多从,数据分片 |
| 高可用 | 无(单点故障) | 有(自动故障转移) | 有(自动故障转移) |
| 数据分片 | 不支持 | 不支持(全量数据在主节点) | 支持(16384 slot 分片) |
| 写扩展 | 不支持 | 不支持(单主写入) | 支持(多主并行写入) |
| 读扩展 | 不支持 | 支持(从节点分担读) | 支持(从节点分担读) |
| 最大容量 | 单机内存 | 单机内存 | 所有主节点内存之和 |
| 复杂度 | 低 | 中 | 高 |
| 适用场景 | 开发/测试/小数据量 | 读多写少,数据量可单机承载 | 大数据量、高并发、需要水平扩展 |
选型决策:
数据量 < 单机内存 且 写 QPS 不高?
├─ 不需要高可用 → 单机(最简单)
└─ 需要高可用 → 哨兵模式(主从 + 自动切换)
数据量 > 单机内存 或 写 QPS 很高(需要分散到多节点)?
→ Redis Cluster(数据分片 + 自动故障转移)
实际生产:
小型项目 → 哨兵模式(1主2从3哨兵)
中大型项目 → Redis Cluster(至少 3主3从)各模式的数据同步方式:
单机:无同步
哨兵:主从异步复制(和普通主从一样)
Cluster:
① 节点内(主→从):异步复制
② 节点间(slot 迁移):MIGRATE 命令原子迁移 key
③ 不支持跨 slot 事务(不同 slot 可能在不同节点)七、限流
追问与易错
追问方向:
- 什么场景 Memcached 更好?
- Redis 6.0 多线程和 Memcached 多线程区别?
- Memcached slab 分配问题?
易错点:
- ❌ Redis 完全替代 Memcached——纯 KV 场景后者有优势
- ❌ Redis 单线程所以吞吐低——瓶颈通常在网络不在 CPU
💡 记忆锚点
Redis是瑞士军刀(多数据结构、持久化、集群、脚本样样行),Memcached是一把快刀(纯内存多线程KV,简单但锋利)。选型口诀:只切菜用快刀,做全桌菜用瑞士军刀。