Redis Cache 与 Memcached Cache 详细比较

memcached vs redis

1. 快速概览

项目RedisMemcached
类型内存型数据存储,支持多种数据结构简单的内存键值存储
线程模型单线程多线程
数据类型Strings、Lists、Sets、Hashes、Sorted Sets…仅键值对(二进制安全)
持久化支持(RDB/AOF),可配置不支持(仅 RAM)
复制/集群支持副本、分片和集群仅手动分片
Pub/Sub、Lua支持不支持

2. 性能

  • Memcached
    • 多线程,可充分利用多核 CPU,在简单的 GET/SET 操作上吞吐量极高。
    • 延迟:标准负载下约 0.1–0.5 毫秒。
  • Redis
    • 单线程但高度优化;借助流水线(pipelining)和 I/O 多路复用,每秒可超过 100 000 次操作。
    • 支持流水线减少 RTT,Lua 脚本可批量执行多个命令。

直接对比,在纯 GET/SET 场景下,Memcached 的吞吐量可能比 Redis 高出几个百分点;但在使用流水线、批处理或复杂数据结构时,Redis 往往更具优势。


3. 优缺点

Redis

优点

  1. 丰富的数据结构:列表、集合、哈希、有序集合、Stream 等,适用于缓存、排行榜、队列等多种场景。
  2. 持久化:RDB 快照和 AOF 日志保证数据可恢复。
  3. 高可用:支持主从复制、Sentinel 自动故障转移、集群分片。
  4. Pub/Sub & 流:内置消息发布订阅和流式处理能力。
  5. Lua 脚本与事务:原子化多命令执行,减少网络往返。

缺点

  1. 单线程:单实例仅利用一个 CPU 核心,限制并行处理能力。
  2. 内存开销:丰富的数据结构比 Memcached 占用更多 RAM。
  3. 运维复杂:功能多,需要更细致的配置和监控。

Memcached

优点

  1. 简单轻量:仅键值对,安装配置简单,部署快速。
  2. 多线程:天然利用多核,实现高吞吐量。
  3. 内存效率高:每项开销极低,非常适合纯缓存场景。
  4. 生态成熟:大量客户端、插件和模块支持。

缺点

  1. 无持久化:重启后缓存全部丢失。
  2. 数据模型单一:仅键值对。
  3. 无内置高可用:分片和故障转移需外部管理。

4. 基本部署流程

部署 Memcached

安装

sudo apt-get update
sudo apt-get install memcached

配置 (/etc/memcached.conf)

  • -m:内存大小(MB)
  • -p:端口(默认 11211)
  • -u:运行用户
  • -t:线程数

启动与监控

systemctl enable memcached
systemctl start memcached

可使用 memcached-tool 或 telnet 连接 stats 命令查看统计数据。

分片:通过客户端分片或使用 Twemproxy 等代理实现。

部署 Redis

安装

sudo apt-get update
sudo apt-get install redis-server

配置 (/etc/redis/redis.conf)

  • maxmemory & maxmemory-policy
  • 持久化:save(RDB)、appendonly yes(AOF)
  • 复制:replicaof host port
  • 集群设置(如需)

启动与监控

systemctl enable redis-server 

systemctl start redis-server

Use redis-cli info to inspect stats, replication, and memory usage.

  1. Scaling
    • Replica: add Redis replicas for read scaling.
    • Sentinel: configure for auto‑failover HA.
    • Cluster mode: automatic sharding across multiple nodes.

5. When to Choose Which

Use CaseChoose RedisChoose Memcached
Simple key–value caching only
Extreme throughput across many cores
Need complex data types (queues, sorted sets)
Need persistence & recovery on restart
Need built‑in pub/sub or messaging
Require auto‑failover and high availability✔ (Sentinel/Cluster)❌ (external management)
Want minimal configuration & footprint

  1. 使用 redis-cli info 查看内存、复制及统计信息。
  2. 扩展
    • 副本:新增从节点以扩展读能力。
    • Sentinel:配置自动故障转移与高可用。
    • 集群:多节点自动分片。

5. 何时选择哪种

场景选择 Redis选择 Memcached
仅需简单键值缓存
需要极限多核吞吐
需要复杂数据结构(队列、有序集合等)
需要持久化与重启恢复
需要内置 Pub/Sub 或消息系统
需要自动故障转移和高可用✔ (Sentinel/Cluster)❌ (需外部管理)
希望配置和运维尽量简单

结论

  • 如果您的应用只需简单、高速的内存缓存,而不需要持久化或复杂数据结构,选择 Memcached
  • 如果您需要丰富的数据类型持久化复制/高可用Pub/Sub脚本化 功能,或计划通过集群扩展,选择 Redis