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