我刚工作那会儿,第一次被问到这个问题,是在一家做电商的公司。面试官笑眯眯地问我一句:
“你觉得 Redis 和 Memcached 有什么区别?”
我当时心里一紧:完了,这题我背过,但我只会背,不会讲。
后来工作几年,我才真正明白Redis 和 Memcached,本质上就像两家完全不同风格的“仓储公司”。
- 一家主打:快、简单、能抗压
- 另一家主打:功能全、会记账、能扩展
今天,我就用一个故事,带你把这两家仓储公司从背景、能力、适用场景到面试回答套路全部讲清楚。
故事设定:缓存镇的两位大佬
想象一个地方,叫 缓存镇。镇上有两家仓储公司:
1、 Memcached:快递仓里的“快枪手”
- 仓库结构简单
- 只存“箱子”
- 不关心箱子里是什么
- 客户要得快,给得也快
它的座右铭是: “别问那么多,给我 Key,我立刻把 Value 扔给你。”
2、Redis:全能型“智能仓储中心”
- 仓库有分区、有货架
- 不止存箱子,还能存袋子、抽屉、流水账
- 还能记住仓库状态
- 停电了还能恢复
它的座右铭是: “我不光快,我还聪明。”
核心差异一:数据结构 —— 这是最本质的区别
1、Memcached:只有 Key-Value
Memcached 支持的数据结构非常单一:key -> value(value 是一坨字节),不管你存的是字符串、对象、JSON,在它眼里都是一坨 bytes。
取出来,你还得自己反序列化。
2、Redis:数据结构丰富得像乐高
Redis 支持的数据结构包括:
- String
- Hash
- List
- Set
- ZSet(有序集合)
- Bitmap
- HyperLogLog
- Stream
这意味着什么?
- Redis 可以直接帮你完成一大堆业务逻辑
- 减少数据库压力
- 减少 Java 层的复杂代码
3、表格对比:数据结构
核心差异二:持久化能力 —— “断电谁先跑路?”
1、Memcached:断电即失忆
Memcached 完全不支持持久化。
- 服务重启
- 机器宕机
- 内存清空
结果只有一个:数据全没了。
它的哲学是:“反正我是缓存,丢了你再算呗。”
2、Redis:我能记住昨天发生了什么
Redis 支持持久化:
- RDB:定期快照
- AOF:记录每一条写命令
哪怕机器重启,也能把数据恢复回来。
3、表格对比:持久化
核心差异三:内存管理方式
这是社招面试特别容易加分的一点。
1、Memcached:Slab Allocation(切块专家)
Memcached 会把内存切成固定大小的块(Slab)。
好处:
- 内存分配快
- 减少碎片
坏处:
- 一旦分配不合理,浪费内存
2、Redis:更灵活的内存管理
Redis 使用更通用的内存分配方式:
- 支持动态调整
- 对复杂数据结构更友好
3、表格对比:内存管理
核心差异四:功能丰富度
1、Redis 的“十八般武艺”
Redis 能干的事包括但不限于:
- 分布式锁
- 消息队列(List / Stream)
- 计数器
- 限流
- 排行榜
- 位图统计
2、Memcached 呢?
对不起,我只负责存和取。
3、表格对比:功能
性能对比:谁更快?
这是一个非常容易被问坑的问题。
真相是:
- 纯 KV 读写: Memcached 略快
- 复杂操作: Redis 完胜
为什么?
- Memcached 协议简单
- Redis 功能多,处理逻辑更复杂
但在真实业务中:99% 的场景,Redis 的性能完全够用
集群与高可用
1、Memcached
- 原生不支持集群
- 通常靠客户端一致性 Hash
- 节点挂了,缓存直接失效
2、Redis
- 主从复制
- Sentinel
- Cluster
3、Redis Cluster
- 数据自动分片
- 节点自动迁移
- 高可用
4、表格对比:高可用
真实项目中怎么选?
我给你一个特别实用的口诀:
简单缓存用 Memcached,复杂业务选 Redis
1、适合 Memcached 的场景
- 页面缓存
- Session 缓存
- 简单对象缓存
- 丢了也没事
2、适合 Redis 的场景
- 分布式锁
- 计数、排行榜
- 消息队列
- 高可用缓存
- 准数据库使用
面试标准回答模板(直接背)
最后,送你一个社招面试标准回答模板:
Redis 和 Memcached 都是内存缓存,但定位不同。
Memcached 是纯 Key-Value 缓存,结构简单、性能高,但不支持持久化和复杂数据结构,适合简单缓存场景。
Redis 支持多种数据结构,支持持久化、主从复制和集群,功能更丰富,适合复杂业务场景,比如分布式锁、计数器和消息队列。在实际项目中,如果只是简单缓存,可以使用 Memcached;如果对功能和可靠性要求较高,一般会选择 Redis。
说完这段,90% 的面试官都会点头。
END
后来我才明白Redis 和 Memcached 的区别,不只是技术选型,更是你对系统复杂度的理解。
当你能把这道题讲成一个故事的时候,你就已经不是“背面试题的人”了。
好朋友们,我们下篇见。
我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!