首页/数据/NoSQL 速查/Redis 与 Memcached 选型对照
选型与架构50 条

Redis 与 Memcached 选型对照

两者都做内存 KV,但能力边界不同:Memcached 定位纯缓存、多线程共享内存;Redis 提供数据结构、持久化、复制与集群。判断标准是要不要持久化、复杂结构与高可用,而不是单纯比较吞吐数字。

NoSQL 速查数据更新于 2026-10-13

为什么要把两者放一起比

Redis 与 Memcached 都做内存键值存储,但能力边界不同:Memcached 定位纯缓存,多线程共享内存、结构单一;Redis 提供多种数据结构、持久化、复制与集群。选型的判断标准是要不要持久化、要不要复杂结构与高可用,而不是单纯比较吞吐数字。

基本信息

数据模型Redis 多种结构;Memcached 只有 key 到字符串的映射
持久化Redis 支持 RDB / AOF;Memcached 无内置持久化
高可用Redis 有主从、Sentinel、Cluster;Memcached 靠客户端分片
线程模型Redis 命令执行单线程(6.0 起网络 IO 可多线程);Memcached 多线程
单值上限Redis 512MB;Memcached 默认 1MB,启动参数可调

典型使用场景

  • 只把数据库查询结果缓存起来、希望运维面最小时选 Memcached
  • 需要计数、排行、去重、延迟队列时选 Redis
  • 需要缓存侧故障自动切换时选 Redis
  • 多核机器上做简单大 KV 缓存,Memcached 的多线程更直接
  • 要求重启后不丢数据或需要持久化审计时只能选 Redis

典型命令

典型命令
# Redis:写入带 TTL 的会话键并确认剩余时间
redis-cli SET session:1001 "uid=7" EX 1800
redis-cli TTL session:1001

# Redis:原子计数与排行榜
redis-cli INCR page:view:20261013
redis-cli ZADD rank 120 u1 95 u2

# Memcached:文本协议查看运行统计
printf 'stats\r\n' | nc 127.0.0.1 11211 | head -20

# Memcached:写入并读取一个键
printf 'set k 0 60 3\r\nabc\r\nget k\r\n' | nc 127.0.0.1 11211

能力对照

维度RedisMemcached
数据模型string/hash/list/set/zset 等多种结构单一 key 到 value 字符串
持久化RDB / AOF,可关闭无内置持久化
复制与高可用主从复制、Sentinel、Cluster无内置复制,靠客户端分片
线程模型命令执行单线程,6.0 起网络 IO 多线程多线程处理请求
单值上限512MB默认 1MB,启动参数可调
典型场景缓存加计数、队列、会话、分布式锁纯页面与对象缓存、大规模简单 KV
需要原子计数、排行、去重、延迟队列这类能力时选 Redis;只是把数据库查询结果缓存起来、且不想引入持久化与集群组件时,Memcached 的运维面更小。

易错点

  • 把 Redis 当纯缓存用时关闭持久化能减少 fork 与磁盘压力,但重启后缓存全部失效,回源冲击要提前评估
  • Memcached 单值超过上限会直接拒绝写入并返回 object too large,大对象场景要先拆分或更换方案
  • Memcached 没有内置复制,节点故障意味着这部分缓存全部丢失,客户端分片的扩缩容还会引发大面积失效
  • 默认的 Memcached 常监听所有地址且无认证,暴露到公网会被人当作反射攻击的放大器,必须限制来源或只监听内网

数据来源与参考

  • Redis Docs: Data types
  • Redis Docs: Persistence
  • Memcached Wiki(GitHub memcached/memcached)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌