PHP - Memcache 函数


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() 在运行时更改服务器参数和状态。