有两种方法可以使 PHP 作为 memcached 客户端,调用 memcached 的服务进行对象存取操作。
第一种,PHP 有一个叫做 memcache 的扩展,Linux 下编译时需要带上 –enable-memcache[=DIR] 选项,Window 下则在 php.ini 中去掉 php_memcache.dll 前边的注释符,使其可用。
除此之外,还有一种方法,可以避开扩展、重新编译所带来的麻烦,那就是直接使用 php-memcached-client。
本文选用第二种方式,虽然效率会比扩展库稍差一些,但问题不大。
首先 下载 memcached-client.php,在下载了 memcached-client.php 之后,就可以通过这个文件中的类“memcached”对 memcached 服务进行操作了。其实代码调用非常简单,主要会用到的方法有 add()、get()、replace() 和 delete(),方法说明如下:
add ($key, $val, $exp = 0)
往 memcached 中写入对象,$key 是对象的唯一标识符,$val 是写入的对象数据,$exp 为过期时间,单位为秒,默认为不限时间;
get ($key)
从 memcached 中获取对象数据,通过对象的唯一标识符 $key 获取;
replace ($key, $value, $exp=0)
使用 $value 替换 memcached 中标识符为 $key 的对象内容,参数与 add() 方法一样,只有 $key 对象存在的情况下才会起作用;
delete ($key, $time = 0)
删除 memcached 中标识符为 $key 的对象,$time 为可选参数,表示删除之前需要等待多长时间。
下面是一段简单的测试代码,代码中对标识符为 'mykey' 的对象数据进行存取操作:
<pre>
<?php
// 包含 memcached 类文件
require_once('memcached-client.php');
// 选项设置
$options = array(
'servers' => array('192.168.1.1:11211'), //memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务
'debug' => true, //是否打开 debug
'compress_threshold' => 10240, //超过多少字节的数据时进行压缩
'persistant' => false //是否使用持久连接
);
// 创建 memcached 对象实例
$mc = new memcached($options);
// 设置此脚本使用的唯一标识符
$key = 'mykey';
// 往 memcached 中写入对象
$mc->add($key, 'some random strings');
$val = $mc->get($key);
echo "n".str_pad('$mc->add() ', 60, '_')."n";
var_dump($val);
// 替换已写入的对象数据值
$mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));
$val = $mc->get($key);
echo "n".str_pad('$mc->replace() ', 60, '_')."n";
var_dump($val);
// 删除 memcached 中的对象
$mc->delete($key);
$val = $mc->get($key);
echo "n".str_pad('$mc->delete() ', 60, '_')."n";
var_dump($val);
?>
</pre>
是不是很简单,在实际应用中,通常会把数据库查询的结果集保存到 memcached 中,下次访问时直接从 memcached 中获取,而不再做数据库查询操作,这样可以在很大程度上减轻数据库的负担。通常会将 SQL 语句 md5() 之后的值作为唯一标识符 key。下边是一个利用 memcached 来缓存数据库查询结果集的示例(此代码片段紧接上边的示例代码):
<?php
$sql = 'SELECT * FROM users';
$key = md5($sql); //memcached 对象标识符
if ( !($datas = $mc->get($key)) ) {
// 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db('test');
$result = mysql_query($sql);
while ($row = mysql_fetch_object($result))
$datas[] = $row;
// 将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
$mc->add($key, $datas);
} else {
echo "n".str_pad('Read datas from memcached.', 60, '_')."n";
}
var_dump($datas);
?>
可以看出,使用 memcached 之后,可以减少数据库连接、查询操作,数据库负载下来了,脚本的运行速度也提高了。
之前我曾经写过一篇名为《PHP 实现多服务器共享 SESSION 数据》文章,文中的 SESSION 是使用数据库保存的,在并发访问量大的时候,服务器的负载会很大,经常会超出 MySQL 最大连接数,利用 memcached,我们可以很好地解决这个问题,工作原理如下:
- 用户访问网页时,查看 memcached 中是否有当前用户的 SESSION 数据,使用 session_id() 作为唯一标识符;如果数据存在,则直接返回,如果不存在,再进行数据库连接,获取 SESSION 数据,并将此数据保存到 memcached 中,供下次使用;
- 当前的 PHP 运行结束(或使用了 session_write_close())时,会调用 My_Sess::write() 方法,将数据写入数据库,这样的话,每次仍然会有数据库操作,对于这个方法,也需要进行优化。使用一个全局变量,记录用户进入页面时的 SESSION 数据,然后在 write() 方法内比较此数据与想要写入的 SESSION 数据是否相同,不同才进行数据库连接、写入数据库,同时将 memcached 中对应的对象删除,如果相同的话,则表示 SESSION 数据未改变,那么就可以不做任何操作,直接返回了;
- 那么用户 SESSION 过期时间怎么解决呢?记得 memcached 的 add() 方法有个过期时间参数 $exp 吗?把这个参数值设置成小于 SESSION 最大存活时间即可。另外别忘了给那些一直在线的用户延续 SESSION 时长,这个可以在 write() 方法中解决,通过判断时间,符合条件则更新数据库数据。
相关资源
分享到:
相关推荐
标题 "PHP7.x 8.0 memcache dll php_memcache.dll" 涉及到的是在PHP 7.x和8.0版本中使用memcache扩展的相关内容,特别是关于`php_memcache.dll`这个动态链接库文件。memcache是广泛应用于Web开发中的一个内存对象...
**PHP Memcache 多版本拓展库详解** PHP Memcache拓展是PHP编程中广泛使用的扩展,它为PHP应用程序提供了与Memcached缓存系统交互的能力。Memcached是一个高性能的分布式内存对象缓存系统,常用于减轻数据库负载,...
**PHP与Memcache扩展在Windows环境下的配置与应用** PHP是一种广泛使用的开源脚本语言,尤其在Web开发中被大量采用。Memcache是一款高性能的分布式内存对象缓存系统,它可以用来存储各种数据,如数据库查询结果、...
《PHP 5.4.4与php_memcache扩展:实现高效分布式缓存》 在Web开发领域,PHP作为一门广泛使用的服务器端脚本语言,其性能优化和数据处理能力至关重要。其中,分布式缓存技术是提升网站性能的有效手段之一。在PHP ...
标题 "php5.4_memcache.dll 64位" 指的是针对PHP 5.4版本的一个64位扩展,用于支持Memcache缓存系统。这个扩展使得PHP应用程序能够利用Memcache服务来存储和检索数据,从而提高网站性能,减少数据库负载。 描述中的...
标题 "php 5.4.15 64位 memcache.dll" 指的是针对 PHP 5.4.15 版本的一个64位系统优化的 memcache 扩展库。Memcache 是一种广泛使用的分布式内存缓存系统,用于在 Web 应用程序中提高数据读取速度,通过存储经常访问...
在PHP中,我们通常使用php_memcache.dll扩展来与Memcache服务器进行交互。针对“memcache安装php5.2.17的php_memcache.dll”的主题,我们将深入探讨如何在Windows环境下安装和配置这个扩展。 1. **下载准备** 首先...
标题中的“php5.6 php7.0 php7.1 memcache.dll扩展”指的是这个压缩包文件包含了适用于PHP 5.6、PHP 7.0和PHP 7.1版本的memcache扩展的.dll动态链接库文件。Memcache是PHP中一个非常重要的扩展,它允许开发者在PHP...
PHP 添加 Memcache 扩展 : 下载包中包括如下: php_memcache-3.0.8-5.5-nts-vc11-x64.zip php_memcache-3.0.8-5.5-nts-vc11-x86.zip php_memcache-3.0.8-5.5-ts-vc11-x64.zip ...
memcache图形监控工具phpmemcache,尽是一个PHP文件就... 使用方法:本地测试监控机安装Apache或者下载XAMPP(Apache+MySQL+PHP+PERL),安装后把memcachephp.zip中的memcache.php文件放到www或者htdocs目录下即可。
标题 "php7.2 memcache.dll" 涉及到的是PHP编程语言的一个扩展模块,具体是Memcache的动态链接库(DLL)文件,用于在PHP 7.2环境中与Memcache缓存系统进行交互。PHP是一种广泛使用的开源服务器端脚本语言,尤其适合...
《PHP7 Memcache扩展3.0.9在Linux上的安装与使用详解》 在Web开发领域,PHP作为服务器端脚本语言,广泛应用于构建动态网站。为了提高网站性能,开发者通常会利用缓存技术,而Memcache就是一种广泛应用的分布式内存...
在PHP环境中,Memcache扩展使得PHP脚本可以直接与Memcache服务器进行交互,实现数据的快速读取和存储。 在PHP5.5版本中,对于32位和64位操作系统,需要安装对应的memcache扩展才能使用。这个扩展通常以`.dll`文件...
**PHP 5.4与Memcache的整合** 在PHP 5.4版本中,开发者可以利用Memcache扩展来实现高效的数据缓存,从而提高Web应用的性能。Memcache是一款广泛使用的分布式内存对象缓存系统,它能存储键值对数据,并在内存中快速...
**PHP5.4.7与php_memcache.dll** PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其适合于Web开发,用于生成动态网页内容。在PHP5.4.7版本中,它引入了一系列增强性能和功能的改进。这个版本发布于...
**Windows环境下PHP7-Memcache扩展的安装与配置** 在Windows服务器上运行PHP应用程序时,为了提高数据存储和检索的效率,我们常常会使用到Memcache扩展。Memcache是一款广泛使用的分布式内存对象缓存系统,它能有效...
**PHP5.3与Memcache** 在Web开发领域,PHP是一种广泛应用的服务器端脚本语言,而Memcache则是一款高效、分布式的内存对象缓存系统。本文将详细讲解PHP5.3版本下如何使用和配置Memcache,以及两者结合带来的性能优化...
**PHP Memcache扩展** PHP Memcache扩展是一种用于在PHP中与Memcached缓存服务器进行交互的接口。Memcached是一款高性能的分布式内存对象缓存系统,它能够存储和检索数据,包括动态网页应用中的session和对象,以...
标题 "php7 memcache扩展" 描述 "php7.0 7.1 (vc14/vc15) memcache扩展 windows(x86/x64)" 提及了几个关键概念,包括PHP7、memcache扩展以及适用于Windows平台的不同架构版本。这里,我们将深入探讨这些主题,并...
标题 "windows用php7的memcache所有版本dll" 指的是在Windows操作系统上,针对PHP7的不同版本,提供了一系列的memcache扩展dll文件。这些动态链接库(dll)是PHP与Memcached缓存系统交互的关键组件,允许PHP应用程序...