深蓝黑背景品牌封面:左侧大标题「Redis 还是 Memcached」,副标题「区别不只是数据结构」;右侧原创装饰——两个并排的存储罐,左罐(青色)内叠放多种形状小块示意多数据结构,右罐(紫色)只放统一的键值小条示意纯 KV,两罐中间一枚天平;左上标注「经典题解析 · 缓存」,右上标注「Day 08 · 10-06」 图 1:本文封面,点明两款缓存组件的选型主题。

先说明属性:这是一篇经典题解析,题目出自本地历史面试资料,与任何公司的当前招聘无关。「Redis 和 Memcached 的区别」是缓存选型的经典题,很多人只背出一句「Redis 数据结构多」,面试官顺着持久化、集群、线程模型一路追问,就接不住了。

面试现场的场景往往是:让你给一个新业务选缓存组件,然后观察你的决策维度够不够全。

核心结论一句话:Memcached 是纯粹的内存缓存,Redis 是带缓存能力的数据结构服务器。

维度一:数据结构。

Memcached 只有简单的键值对——官方文档说得很直白:服务端不理解数据结构,你存的必须是预序列化好的数据。Redis 原生提供字符串、哈希、列表、集合、有序集合等结构:排行榜用有序集合,队列用列表,计数器直接自增。这些需求在 Memcached 里都要应用层自己拼,拼出来还没有原子性保证。

维度二:持久化。

Memcached 没有持久化,重启即丢——它从设计上就只做缓存。Redis 官方提供 RDB 快照(按间隔做时间点镜像)和 AOF 日志(记录每条写操作,默认每秒刷盘,最多丢一秒数据),两者可以混用,也可以全关当纯缓存。要不要把会话、计数这类「丢了心疼」的数据放进缓存层,是两家的第一道分水岭。

维度三:集群与扩展。

Memcached 的服务端之间互不感知——没有复制、没有通信,官方文档明确「servers are disconnected from each other」,分片靠客户端的一致性哈希,加机器就是加内存。Redis 有官方 Cluster:槽位分片、主从复制、自动故障转移,服务端自己知道每个 key 在哪。

维度四:线程模型。

Memcached 是多线程 worker 模型,官方配置文档写明默认 4 个线程,可以吃满多核。Redis 从命令执行的角度基本是单线程——官方基准文档的原话是「mostly a single-threaded server from the POV of commands execution」,现代版本用线程做 IO 与后台任务辅助。单线程意味着没有锁竞争、单命令天然原子,单核吞吐已经极高;要吃多核,官方的建议是起多个实例。

维度五:功能集。

Memcached 官方把自己的哲学写成「遗忘是特性」:LRU 过期淘汰、惰性回收、协议极简,只做一件事并做到最快。Redis 在此之外还有过期策略、事务、Lua 脚本、发布订阅等——能力面宽得多,复杂度也由此而来。

选型决策。

只要简单 KV 缓存、数据丢得起、想把多核大内存机器吃满——Memcached 够用,而且更简单。需要复杂结构、持久化、高可用、原子操作——直接 Redis。这也是当下绝大多数团队的默认答案:Redis 覆盖了 Memcached 的几乎所有场景,反过来不成立。

落到 AI 工程场景,分水岭问题变得更具体。

会话状态缓存:多轮对话的上下文要跨实例共享、丢了用户立刻有感——需要共享存储加可接受的持久化,Redis。推理结果缓存:同 prompt 的生成结果缓存起来省钱,丢了无非重算一次——纯 KV 就够,两家都能干。热点排行榜、任务队列、限流计数器:复杂结构加原子操作,Memcached 直接出局。把业务的每类数据按「结构复杂度、丢不丢得起、要不要共享高可用」三个问题过一遍,选型结论往往自己走出来。

对比图:五个维度横向对比 Redis 与 Memcached。数据结构:Memcached 只有字符串 KV;Redis 有字符串、哈希、列表、集合、有序集合等丰富结构,排行榜、队列、计数器都能原生表达。持久化:Memcached 没有持久化,重启即丢;Redis 有 RDB 快照与 AOF 日志,可承担轻量持久存储。集群与扩展:Memcached 靠客户端一致性哈希分片,服务端互不感知;Redis 有官方 Cluster 槽位分片与主从复制。线程模型:Memcached 多线程,能榨干多核;Redis 主流程单线程(IO 线程辅助),避免了锁竞争,单核吞吐已极高。内存与功能:Memcached 只做 LRU 纯缓存,协议极简;Redis 支持过期策略、事务、Lua 脚本、发布订阅。底部选型决策:只要简单 KV 缓存、多核大内存机器、丢得起——Memcached 够用;需要复杂结构、持久化、高可用、原子操作——直接 Redis,这也是当下绝大多数团队的默认答案 图 2:五个维度的横向对比与选型决策。

常见误区。

一,只答「数据结构多」,其余四个维度全哑——等于只背了结论。二,以为 Redis 单线程所以慢:单线程避免了锁与上下文切换,配合 IO 多路复用,官方基准页面上的示例单实例轻松跑到每秒十万次以上的请求,真正的瓶颈通常在内存和网络。三,把 Memcached 当持久层用,重启之后追悔莫及。四,以为 Memcached 有服务端集群方案,上线才发现扩缩容要自己在客户端处理一致性哈希的迁移。

答题建议。

先给一句话定位(纯缓存 vs 数据结构服务器),再按数据结构、持久化、集群、线程、功能五个维度展开,最后落到具体场景做决策。如果能补一句「我们当时因为要排行榜和会话持久化选了 Redis」,这道题就稳了——选型题的高分在决策依据,不在参数罗列。

你的团队现在还留着 Memcached 吗?是历史遗留还是有意选型?欢迎分享。