`
haohappy2
  • 浏览: 326335 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

有两种方法可以使 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

    标题 "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 Memcache拓展是PHP编程中广泛使用的扩展,它为PHP应用程序提供了与Memcached缓存系统交互的能力。Memcached是一个高性能的分布式内存对象缓存系统,常用于减轻数据库负载,...

    windows php memcache 扩展

    **PHP与Memcache扩展在Windows环境下的配置与应用** PHP是一种广泛使用的开源脚本语言,尤其在Web开发中被大量采用。Memcache是一款高性能的分布式内存对象缓存系统,它可以用来存储各种数据,如数据库查询结果、...

    php5.4.4-php_memcache

    《PHP 5.4.4与php_memcache扩展:实现高效分布式缓存》 在Web开发领域,PHP作为一门广泛使用的服务器端脚本语言,其性能优化和数据处理能力至关重要。其中,分布式缓存技术是提升网站性能的有效手段之一。在PHP ...

    php5.4_memcache.dll 64位

    标题 "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.dll" 指的是针对 PHP 5.4.15 版本的一个64位系统优化的 memcache 扩展库。Memcache 是一种广泛使用的分布式内存缓存系统,用于在 Web 应用程序中提高数据读取速度,通过存储经常访问...

    memcache安装php5.2.17的php_memcache.dll

    在PHP中,我们通常使用php_memcache.dll扩展来与Memcache服务器进行交互。针对“memcache安装php5.2.17的php_memcache.dll”的主题,我们将深入探讨如何在Windows环境下安装和配置这个扩展。 1. **下载准备** 首先...

    php5.6 php7.0 php7.1 memcache.dll扩展

    标题中的“php5.6 php7.0 php7.1 memcache.dll扩展”指的是这个压缩包文件包含了适用于PHP 5.6、PHP 7.0和PHP 7.1版本的memcache扩展的.dll动态链接库文件。Memcache是PHP中一个非常重要的扩展,它允许开发者在PHP...

    PHP5.5/5.6的 32&63 VC11 Memcache扩展php_memcache.dll

    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

    memcache图形监控工具phpmemcache,尽是一个PHP文件就... 使用方法:本地测试监控机安装Apache或者下载XAMPP(Apache+MySQL+PHP+PERL),安装后把memcachephp.zip中的memcache.php文件放到www或者htdocs目录下即可。

    php7.2 memcache.dll

    标题 "php7.2 memcache.dll" 涉及到的是PHP编程语言的一个扩展模块,具体是Memcache的动态链接库(DLL)文件,用于在PHP 7.2环境中与Memcache缓存系统进行交互。PHP是一种广泛使用的开源服务器端脚本语言,尤其适合...

    php memcache-3.0.9.tar.gz php7 扩展 linux 包

    《PHP7 Memcache扩展3.0.9在Linux上的安装与使用详解》 在Web开发领域,PHP作为服务器端脚本语言,广泛应用于构建动态网站。为了提高网站性能,开发者通常会利用缓存技术,而Memcache就是一种广泛应用的分布式内存...

    memcache 扩展,php5.5 32,64 位,以及其他版本下载地址

    在PHP环境中,Memcache扩展使得PHP脚本可以直接与Memcache服务器进行交互,实现数据的快速读取和存储。 在PHP5.5版本中,对于32位和64位操作系统,需要安装对应的memcache扩展才能使用。这个扩展通常以`.dll`文件...

    PHP 5.4 使用的 memcache

    **PHP 5.4与Memcache的整合** 在PHP 5.4版本中,开发者可以利用Memcache扩展来实现高效的数据缓存,从而提高Web应用的性能。Memcache是一款广泛使用的分布式内存对象缓存系统,它能存储键值对数据,并在内存中快速...

    PHP5.4.7 的 php_memcache.dll

    **PHP5.4.7与php_memcache.dll** PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其适合于Web开发,用于生成动态网页内容。在PHP5.4.7版本中,它引入了一系列增强性能和功能的改进。这个版本发布于...

    windows php7-memcache扩展

    **Windows环境下PHP7-Memcache扩展的安装与配置** 在Windows服务器上运行PHP应用程序时,为了提高数据存储和检索的效率,我们常常会使用到Memcache扩展。Memcache是一款广泛使用的分布式内存对象缓存系统,它能有效...

    php5.3的memcache

    **PHP5.3与Memcache** 在Web开发领域,PHP是一种广泛应用的服务器端脚本语言,而Memcache则是一款高效、分布式的内存对象缓存系统。本文将详细讲解PHP5.3版本下如何使用和配置Memcache,以及两者结合带来的性能优化...

    php_memcache.dll

    **PHP Memcache扩展** PHP Memcache扩展是一种用于在PHP中与Memcached缓存服务器进行交互的接口。Memcached是一款高性能的分布式内存对象缓存系统,它能够存储和检索数据,包括动态网页应用中的session和对象,以...

    php7 memcache扩展

    标题 "php7 memcache扩展" 描述 "php7.0 7.1 (vc14/vc15) memcache扩展 windows(x86/x64)" 提及了几个关键概念,包括PHP7、memcache扩展以及适用于Windows平台的不同架构版本。这里,我们将深入探讨这些主题,并...

    windows用php7的memcache所有版本dll

    标题 "windows用php7的memcache所有版本dll" 指的是在Windows操作系统上,针对PHP7的不同版本,提供了一系列的memcache扩展dll文件。这些动态链接库(dll)是PHP与Memcached缓存系统交互的关键组件,允许PHP应用程序...

Global site tag (gtag.js) - Google Analytics