Redis 和 Memcached 的真正区别,90% 的人第一条就说错

26 阅读4分钟



我刚工作那会儿,第一次被问到这个问题,是在一家做电商的公司。面试官笑眯眯地问我一句:

“你觉得 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岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!