返回主页 学习路径
Memcached
高性能 · 分布式 · 内存缓存
Memcached 由 Brad Fitzpatrick 于 2003 年创建,是一个高性能的分布式内存对象缓存系统。它通过将数据缓存在内存中,大幅减少数据库查询次数,提升应用响应速度。Memcached 采用简单的键值存储模型,支持分布式部署,是 Web 应用中最经典的缓存解决方案。虽然 Redis 在功能上更为丰富,但 Memcached 以其简单、稳定、高效的特点,仍然在大量生产环境中使用。
分布式缓存鼻祖 · 极速KV存储
📅 诞生时间2003年 · Brad Fitzpatrick
🧩 类型内存缓存 · 键值存储
📊 协议文本协议 / 二进制协议
⚡性能
10/10
📦生态
8/10
🧠易用
10/10
🚀扩展性
7/10

📑 本文目录

📌 第一部分:Memcached 概览与定位

1.1 定义与全称

Memcached 是一个高性能的分布式内存对象缓存系统,由 Brad Fitzpatrick 于 2003 年为 LiveJournal 创建。Memcached 通过将数据缓存在内存中,大幅减少数据库查询次数,提升应用响应速度。

1.2 核心定位

Memcached 的核心定位是 简单、高效、分布式内存缓存。它提供了:

1.3 主要应用领域

1.4 知名案例


📜 第二部分:Memcached 的历史与发展演进

2.1 诞生背景(2003年)

Brad Fitzpatrick 在开发 LiveJournal 时,为了解决数据库负载过高的问题,创建了 Memcached。Memcached 最初是 Perl 实现,后转为 C 语言实现,成为高性能缓存的标杆。

2.2 关键版本里程碑

2.3 设计哲学


⚙️ 第三部分:核心命令与操作

3.1 基础命令

# 设置值
set key 0 3600 5\r\n
value\r\n

# 获取值
get key\r\n

# 添加(仅当不存在)
add key 0 3600 5\r\n
value\r\n

# 替换(仅当存在)
replace key 0 3600 5\r\n
newvalue\r\n

# 追加
append key 5\r\n
_append\r\n

# 前置
prepend key 5\r\n
pre_\r\n

# 删除
delete key\r\n

# 增加(计数器)
incr key 1\r\n

# 减少
decr key 1\r\n

# 获取统计信息
stats\r\n

# 刷新所有缓存
flush_all\r\n

3.2 PHP 操作示例

// 使用 PHP Memcached 扩展
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);

// 设置值(带过期时间)
$memcached->set('key', 'value', 3600);

// 获取值
$value = $memcached->get('key');

// 设置多值
$memcached->setMulti([
    'key1' => 'value1',
    'key2' => 'value2'
], 3600);

// 获取多值
$values = $memcached->getMulti(['key1', 'key2']);

// 原子增减
$memcached->increment('counter', 1);
$memcached->decrement('counter', 1);

// 检查 Key 是否存在
$memcached->get('key');
if ($memcached->getResultCode() === Memcached::RES_NOTFOUND) {
    // Key 不存在
}

// 删除 Key
$memcached->delete('key');

// 统计信息
$stats = $memcached->getStats();

3.3 Python 操作示例

# 使用 python-memcached 库
import memcache

# 连接
mc = memcache.Client(['127.0.0.1:11211'], debug=0)

# 设置值
mc.set('key', 'value', time=3600)

# 获取值
value = mc.get('key')

# 设置多值
mc.set_multi({
    'key1': 'value1',
    'key2': 'value2'
}, time=3600)

# 获取多值
values = mc.get_multi(['key1', 'key2'])

# 原子增减
mc.incr('counter', 1)
mc.decr('counter', 1)

# 删除
mc.delete('key')

3.4 Java 操作示例

// 使用 Spymemcached 库
import net.spy.memcached.MemcachedClient;
import java.net.InetSocketAddress;

MemcachedClient client = new MemcachedClient(
    new InetSocketAddress("localhost", 11211)
);

// 设置值
client.set("key", 3600, "value");

// 获取值
Object value = client.get("key");

// 原子增减
client.incr("counter", 1);
client.decr("counter", 1);

// 删除
client.delete("key");

3.5 分布式部署(一致性哈希)

// PHP 多服务器配置
$memcached = new Memcached();
$memcached->addServers([
    ['192.168.1.10', 11211, 100],  // 权重 100
    ['192.168.1.11', 11211, 200],  // 权重 200
    ['192.168.1.12', 11211, 300],  // 权重 300
]);

// 使用一致性哈希
$memcached->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);

// 设置值(自动分布到对应节点)
$memcached->set('user:12345', $userData, 3600);

⚖️ 第四部分:Memcached 与其他缓存对比

4.1 Memcached vs Redis

对比项 Memcached Redis
数据结构纯 KV丰富(String/Hash/List/Set/ZSet)
持久化无(纯缓存)RDB + AOF
集群模式客户端分片内置集群
延迟微秒微秒
事务不支持支持
复杂度极简较复杂
使用场景纯缓存缓存 + 数据存储

4.2 选择建议


🧠 第五部分:学习建议

1
基础入门

Memcached 安装、基本命令、键值操作

2
进阶使用

过期时间设置、原子操作、批量操作

3
分布式部署

一致性哈希、多服务器配置、故障转移

4
性能优化

连接池、超时设置、内存管理、监控

推荐学习资源


🎯 总结升华

Memcached 是缓存领域的"老牌巨星"。

从 2003 年至今,Memcached 以其 简单、稳定、高效 的特点,服务了全球无数 Web 应用。虽然 Redis 在功能上更为丰富,但 Memcached 依然是纯缓存场景的优选方案。

"Memcached 是现代 Web 缓存的奠基者。" 🚀

🔖 相关标签
#缓存 #内存 #分布式 #KV存储 #性能优化 #高并发
📄 本文档为 Memcached 完整白皮书 · 最后更新于 2026年06月28日