Memcached是基于内存的分布式缓存系统,采用键值对存储结构,所有数据都存放在内存中,读写速度远快于传统磁盘数据库。它支持多客户端并发访问,常用于缓存数据库查询结果、页面片段、会话数据等高频访问内容,减少后端存储的负载。

Memcached核心特性
- 纯内存存储,读写延迟低,性能优异
- 分布式架构,支持横向扩展,可部署多节点组成集群
- 简单的键值对模型,支持字符串、数值等基础数据类型
- LRU淘汰机制,内存不足时自动移除最近最少使用的数据
- 协议简单,支持多种编程语言的客户端接入
环境部署实例
Linux系统安装Memcached
以Ubuntu系统为例,执行以下命令完成安装:
# 更新软件源 sudo apt update # 安装Memcached服务 sudo apt install memcached # 安装PHP客户端扩展(如果需要PHP调用) sudo apt install php-memcached # 启动Memcached服务 sudo systemctl start memcached # 设置开机自启 sudo systemctl enable memcached
验证服务运行状态
执行以下命令查看Memcached是否正常监听11211端口:
# 查看端口监听情况 netstat -tlnp | grep memcached # 输出类似如下内容表示运行正常 # tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 1234/memcached
基础操作实例
使用telnet客户端操作
Memcached支持telnet协议直接交互,连接服务后可以进行数据增删改查:
# 连接本地Memcached服务 telnet 127.0.0.1 11211 # 设置键值对,格式:set 键名 标志 过期时间(秒) 数据长度 set user_name 0 3600 6 zhangsan STORED # 返回STORED表示存储成功 # 获取键值,格式:get 键名 get user_name VALUE user_name 0 6 zhangsan END # 删除键值,格式:delete 键名 delete user_name DELETED # 返回DELETED表示删除成功 # 查看统计信息 stats # 会返回命中次数、内存使用量等统计信息
PHP客户端调用实例
以下是PHP中使用Memcached扩展操作缓存的完整示例:
<?php
// 创建Memcached客户端实例
$memcached = new Memcached();
// 添加服务器节点,可添加多个组成集群
$memcached->addServer('127.0.0.1', 11211);
// 设置缓存数据,过期时间设置为1800秒
$key = 'article_1001';
$value = [
'title' => 'Memcached使用教程',
'author' => '张三',
'view_count' => 1200
];
$result = $memcached->set($key, $value, 1800);
if ($result) {
echo "缓存设置成功n";
} else {
echo "缓存设置失败n";
}
// 获取缓存数据
$cachedData = $memcached->get($key);
if ($cachedData !== false) {
echo "获取到缓存数据:n";
print_r($cachedData);
} else {
echo "缓存未命中n";
}
// 递增数值类型缓存
$memcached->set('page_view', 100, 3600);
$memcached->increment('page_view', 1);
echo "当前页面访问量:" . $memcached->get('page_view') . "n";
// 删除缓存
$memcached->delete($key);
echo "缓存删除完成n";
?>
使用注意事项
- Memcached是内存缓存,服务重启后所有数据会丢失,不适合存储持久化数据
- 单个键值对的大小限制为1MB,超过限制无法存储
- 键名建议采用业务前缀加标识的格式,避免不同业务的键名冲突
- 分布式场景下,Memcached本身不提供数据同步机制,客户端需要实现一致性哈希等路由策略
- 生产环境建议设置内存上限,避免占用过多系统资源
常见应用场景
| 场景 | 说明 |
|---|---|
| 数据库查询缓存 | 将高频查询的SQL结果缓存到Memcached,减少数据库访问次数 |
| 会话存储 | 替代文件存储会话,支持多服务器共享会话数据 |
| 页面片段缓存 | 缓存页面中不常变化的部分,提升页面渲染速度 |
| 计数器 | 利用increment和decrement操作实现访问量、点赞数等计数功能 |