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。