0Pricing
PHP Academy · 课时

使用 Memcached 缓存会话和对象

使用 Memcached 作为 PHP 对象的分布式内存存储。

使用 Memcached 缓存会话和对象 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。

Memcached 是什么

Memcached 是一种高性能的分布式内存键值存储。它广泛用于缓存 PHP 应用中的数据库查询结果和会话数据。

安装

请安装 Memcached 服务器和 PHP 扩展。

# Ubuntu/Debian:
$ apt install memcached php-memcached
$ service memcached start

# Verify:
$ php -m | grep memcached

连接到 Memcached

创建一个 Memcached 实例并添加一个或多个服务器。

<?php
$mc = new Memcached();
$mc->addServer("127.0.0.1", 11211);

// Multiple servers (distributed caching):
$mc->addServers([
    ["192.168.1.10", 11211],
    ["192.168.1.11", 11211],
]);

基本缓存操作

设置、获取、删除和替换缓存条目。

<?php
// Set with TTL:
$mc->set("product:1", $productData, 600); // 10 min

// Get:
$product = $mc->get("product:1");
if ($mc->getResultCode() === Memcached::RES_NOTFOUND) {
    $product = fetchFromDB(1);
    $mc->set("product:1", $product, 600);
}

// Delete:
$mc->delete("product:1");

使用 Memcached 存储会话

将 PHP 会话存储在 Memcached 中,以便多个 Web 服务器快速共享访问。

# php.ini:
session.save_handler = memcached
session.save_path    = "127.0.0.1:11211"

Laravel Memcached 集成

配置 Memcached,并将其用作 Laravel 的缓存驱动。

# .env
CACHE_DRIVER=memcached
MEMCACHED_HOST=127.0.0.1

// Usage is identical to Redis via Cache facade:
Cache::put("key", $value, 300);
$value = Cache::get("key");

Memcached 与 Redis 的比较

Memcached:更简单、支持多线程、纯内存存储(不支持持久化)。Redis:数据类型更丰富、支持可选持久化(AOF/RDB)、发布/订阅和集群。对于纯缓存,两者的性能相近。对于新项目,通常更推荐 Redis。

分布式缓存

Memcached 原生使用一致性哈希将键分布到多台服务器上。随着流量增长,这种方式可以进行水平扩展。

原子 CAS(比较并交换)

Memcached 支持 CAS 操作,只有在上次读取之后没有其他客户端修改该值时,才会安全地更新它。

<?php
$mc->get("counter", null, $cas);
$mc->cas($cas, "counter", $newValue, 60);

TTL 限制

Memcached 的 TTL 最长限制为 30 天。大于约 1 MB 的值会被拒绝。请保持缓存值较小,并进行高效序列化。

监控

使用 memcached-tool 127.0.0.1:11211 stats 检查命中率、内存使用情况和驱逐次数。命中率低或驱逐次数高,表示缓存空间过小。

总结

Memcached 擅长简单的分布式对象缓存和会话缓存。在 Laravel 中,将 CACHE_DRIVER=memcached 设为配置值。在生产环境中,如果需要更丰富的功能,请优先选择 Redis。

快速检查

Memcached 与 Redis 之间有哪一个关键区别?

常见问题解答

「使用 Memcached 缓存会话和对象」课时是免费的吗?

是的 — 「使用 Memcached 缓存会话和对象」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。

「使用 Memcached 缓存会话和对象」这节课中我会学到什么?

使用 Memcached 作为 PHP 对象的分布式内存存储。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 PHP Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 Memcached 缓存会话和对象」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 PHP Academy 课中编写并运行代码吗?

能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么 PHP 中的缓存很重要
  2. 将 Redis 用作 PHP 缓存后端
  3. 使用 Memcached 缓存会话和对象
  4. 缓存失效模式
← 返回 PHP Academy