Memcached 是一个高性能的分布式内存对象缓存系统,由 Brad Fitzpatrick 于 2003 年为 LiveJournal 创建。Memcached 通过将数据缓存在内存中,大幅减少数据库查询次数,提升应用响应速度。
Memcached 的核心定位是 简单、高效、分布式内存缓存。它提供了:
Brad Fitzpatrick 在开发 LiveJournal 时,为了解决数据库负载过高的问题,创建了 Memcached。Memcached 最初是 Perl 实现,后转为 C 语言实现,成为高性能缓存的标杆。
# 设置值
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
// 使用 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();
# 使用 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')
// 使用 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");
// 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 | Redis |
|---|---|---|
| 数据结构 | 纯 KV | 丰富(String/Hash/List/Set/ZSet) |
| 持久化 | 无(纯缓存) | RDB + AOF |
| 集群模式 | 客户端分片 | 内置集群 |
| 延迟 | 微秒 | 微秒 |
| 事务 | 不支持 | 支持 |
| 复杂度 | 极简 | 较复杂 |
| 使用场景 | 纯缓存 | 缓存 + 数据存储 |
Memcached 安装、基本命令、键值操作
过期时间设置、原子操作、批量操作
一致性哈希、多服务器配置、故障转移
连接池、超时设置、内存管理、监控
Memcached 是缓存领域的"老牌巨星"。
从 2003 年至今,Memcached 以其 简单、稳定、高效 的特点,服务了全球无数 Web 应用。虽然 Redis 在功能上更为丰富,但 Memcached 依然是纯缓存场景的优选方案。
"Memcached 是现代 Web 缓存的奠基者。" 🚀