Memcache 模块可以为 Memcached 提供一个方便的程序和面向对象的接口,Memcached 是一个高效的缓存守护程序,专门设计用于减少动态 Web 应用程序中的数据库负载。
Memcache 模块还可以提供会话处理程序 (Memcache)。
有关 Memcached 的更多信息,请访问 » http://www.danga.com/memcached/。
安装
此 PECL 扩展尚未包含在 PHP 中。其他信息,如新版本、下载、源文件、开发人员信息和 CHANGELOG 可以在这里找到: » https://pecl.php.net/package/memcache。
要使用这些功能,我们必须使用 --enable-memcache [= DIR] 选项编译支持 memcache 的 PHP。我们可以通过指定 --disable-memcache-session 来选择性地禁用 memcache 会话处理程序支持。
Windows 用户可以在 php.ini 内部启用 php_memcache.dll 来使用这些功能。我们需要从 »PHP 下载或 » https://www.php.net/manual/en/install.pecl.windows.php 下载此 PECL 扩展的 DLL。
要求
Memcache 模块可以使用 » zlib 的功能来支持动态数据压缩。Zlib 需要安装此模块。
资源类型
emcache 模块中只使用一种资源类型 - 它是缓存服务器连接的链接标识符。
PHP 4.3.3 或更高版本需要使用 Memcache 扩展。
运行时配置
这些功能的行为可能取决于 php.ini 中的设置。
Memcache 配置选项
Name | 默认 | Changeable | 更改日志 |
---|---|---|---|
memcache.allow_failover | "1" | PHP_INI_ALL | 自 memcache 2.0.2 起可用。 |
memcache.max_failover_attempts | "20" | PHP_INI_ALL | 从 memcache 2.1.0 开始可用。 |
memcache.chunk_size | "8192" | PHP_INI_ALL | 自 memcache 2.0.2 起可用。 |
memcache.default_port | "11211" | PHP_INI_ALL | 自 memcache 2.0.2 起可用。 |
memcache.hash_strategy | "standard" | PHP_INI_ALL | 自 memcache 2.2.0 起可用。 |
memcache.hash_function | "crc32" | PHP_INI_ALL | 自 memcache 2.2.0 起可用。 |
session.save_handler | "files" | PHP_INI_ALL | 从 memcache 2.1.2 开始支持 |
session.save_path | "" | PHP_INI_ALL | 从 memcache 2.1.2 开始支持 |
memcache.protocol | ascii | >PHP_INI_ALL | 从 memcache 3.0.0 开始支持 |
memcache.redundancy | 1 | >PHP_INI_ALL | 从 memcache 3.0.0 开始支持 |
memcache.session_redundancy | 2 | >PHP_INI_ALL | 从 memcache 3.0.0 开始支持 |
memcache.compress_threshold | 20000 | >PHP_INI_ALL | 从 memcache 3.0.3 开始支持 |
memcache.lock_timeout | 15 | >PHP_INI_ALL | 自 memcache 3.0.4 起受支持 |
有关 PHP_INI_* 常量的详细说明,请参阅文档 Where a configuration setting can be set.
常量 | 描述 |
---|---|
memcache.allow_failover(boolean) | 是否在出现错误时透明地故障转移到其他服务器。 |
memcache.max_failover_attempts (integer) | 定义在设置和获取数据时要尝试的服务器数量。仅与 memcache.allow_failover 结合使用。 |
memcache.chunk_size(integer) | 数据将以此大小的块传输,将值设置得更低需要更多的网络写入。如果注意到其他莫名其妙的减速,请尝试将此值增加到 32768。 |
memcache.default_port (string) | 如果未指定其他端口,则连接到 memcached 服务器时使用的默认 TCP 端口号。 |
memcache.hash_strategy (string) | 控制在将键映射到服务器时要使用的策略。将此值设置为 consistent 以启用一致性哈希,从而允许在池中添加或删除服务器,而不会导致重新映射键。将此值设置为 standard 会导致使用旧策略。 |
memcache.hash_function (string) | 控制在将密钥映射到服务器时要应用哪个哈希函数,crc32 使用标准 CRC32 哈希,而 fnv 使用 FNV-1a。 |
session.save_handler (string) | 通过将此值设置为 memcache 来使用 memcache 作为会话处理程序。 |
session.save_path(string) | 定义用于会话存储的服务器 URL 逗号分隔,例如“tcp://host1:11211, tcp://host2:11211”。每个 url 都可以包含应用于该服务器的参数,它们与 Memcache::addServer() 方法相同。例如,“tcp://host1:11211?persistent=1&weight=1&timeout=1&retry_interval=15” |
memcache.protocol(string) | |
memcache.redundancy (integer) | |
memcache.session_redundancy(integer) | |
memcache.compress_threshold (integer) | |
memcache.lock_timeout(integer) |
基本用法
在此示例中,对象将保存在缓存中,然后检索回来。对象和其他非标量类型在保存之前会被序列化,因此不可能将资源(即连接标识符和其他)存储在缓存中。
示例 1
使用 memcache 会话处理程序
<?php
$memcache = new Memcache;
$memcache->connect("localhost", 11211) or die ("无法连接");
$version = $memcache->getVersion();
echo "服务器版本: ".$version."<br/>\n";
$tmp_object = new stdClass;
$tmp_object->str_attr = "test";
$tmp_object->int_attr = 123;
$memcache->set("key", $tmp_object, false, 10) or die ("在服务器上保存数据失败");
echo "将数据存储在缓存中(数据将在10秒后过期) <br/>\n";
$get_result = $memcache->get("key");
echo "来自缓存的数据: <br/>\n";
var_dump($get_result);
?>
示例 2
<?php
$session_save_path = "tcp://$host:$port?persistent=1&weight=2&timeout=2&retry_interval=10,,tcp://$host:$port";
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", $session_save_path);
?>
预定义常量
Memcache 常量
常量 | 描述 |
---|---|
MEMCACHE_COMPRESSED (integer) | 使用 Memcache::set()、Memcache::add() 和 Memcache::replace() 打开动态数据压缩。 |
PMEMCACHE_HAVE_SESSION (integer) | 如果此 Memcache 会话处理程序可用,则为 1,否则为 0。 |
MEMCACHE_USER1 (integer) | 使用 Memcache::set()、Memcache::add() 和 Memcache::replace() 打开用户定义的应用程序标志。 |
MEMCACHE_USER2 (integer) | 使用 Memcache::set()、Memcache::add() 和 Memcache::replace() 来 trn 用户定义的应用程序标志。 |
MEMCACHE_USER3 (integer) | 使用 Memcache::set()、Memcache::add() 和 Memcache::replace() 打开用户定义的应用程序标志。 |
MEMCACHE_USER4 (integer) | 使用 Memcache::set()、Memcache::add() 和 Memcache::replace() 打开用户定义的应用程序标志。 |
Memcache 函数
以下是 Memcache 函数 -
函数 | 描述 |
---|---|
Memcache::add() | 此功能可以将项目添加到服务器。 |
Memcache::addServer() | 将 memcached 服务器添加到连接池中。 |
Memcache::close() | 关闭 memcached 服务器连接。 |
Memcache::connect() | 打开 memcached 服务器连接。 |
memcache_debug() | 打开/关闭调试输出。 |
Memcache::decrement() | 减少项目的值。 |
Memcache::delete() | 从服务器中删除项目。 |
Memcache::flush() | 刷新服务器上的所有现有项。 |
Memcache::get() | 从服务器检索项目。 |
Memcache::getExtendedStats() | 从池中的所有服务器获取统计信息。 |
Memcache::getServerStatus() | 返回服务器状态。 |
Memcache::getStats() | 获取服务器的统计信息。 |
Memcache::getVersion() | 返回服务器的版本。 |
Memcache::increment() | 增加项目的值。 |
Memcache::pconnect() | 打开 memcached 服务器长连接。 |
Memcache::replace() | 替换现有项的值。 |
Memcache::set() | 将数据存储在服务器上。 |
Memcache::setCompressThreshold() | 启用大值的自动压缩。 |
Memcache::setServerParams() | 在运行时更改服务器参数和状态。 |