PHP+memcache安装使用例子

52 篇文章 0 订阅
46 篇文章 0 订阅

memcached 是高效、快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序,以守护程序方式运

行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API

包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。PHP 等客户端在与 memcached 服务建立连接之后,接下来的

事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到

memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能

够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。

有两种方法可以使 PHP 作为 memcached 客户端,调用 memcached 的服务进行对象存取操作。 第一种,

PHP 有一个叫做 memcache 的扩展,在PHP中配置好拓展可以使用PHP提供的memcache函数来操作

memcache,Linux 下编译时需要带上 –enable-memcache[=DIR] 选项:

  1. #tar vxzf memcache-3.0.6.tgz  
  2. #cd memcache-3.0.6  
  3. #/usr/local/php/bin/phpize  
  4. #./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir  
  5. #make  
  6. #make install 

Window 下则在 php.ini 中去掉 php_memcache.dll 前边的注释符,使其可用。 除此之外,还有一种方法,可

以避开扩展、重新编译所带来的麻烦,那就是直接使用memcached-client.zip。一般推荐使用第二种方式,只要

在PHP中includememcache-client.php就可以使用这个类提供的函数来操作mecache,虽然效率会比扩展库稍

差一些,但问题不大。windows下的php_memcache.dll在http://downloads.php.net/pierre/这里下载相应版本,

放入ext文件夹,然后在ini中开启即可。

windows下安装memcached服务:

详细过程移步这里:http://www.cnblogs.com/wucg/archive/2011/03/01/1968185.html

ubuntu下安装memcached 服务 :

sudo apt-get install memcached

运行memcached守护进程:

/usr/local/bin/memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P tmp/memcached.pid  

参数说明:/usr/local/bin/memcached 是memcached编译后所在的地址 -d 是一个守护进程占用一个进程, -m 是

分配给memcached的内存,单位MB, -u 是启动memcached的用户, -l 是监听的服务器地址,这里可以设置多台

memcache服务器监听同一个IP作成集群, -p 是端口号,默认是11211,实际企业生产中建议修改, -c是运行时最大

的并发连接数,默认1024, -P是设置保存memcached的pid文件. 其他参数可以用memcached -h获得帮助

实例代码:

01 <?php
02 //   包含 memcached 类文件
03 require_once('memcached-client.php');
04 //   选项设置
05 $options array(
06      'servers' => array('127.0.0.1:11211'), //memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务
07      'debug' => true,   //是否打开 debug
08      'compress_threshold' => 10240,   //超过多少字节的数据时进行压缩
09      'persistant' => false   //是否使用持久连接
10      );
11 //   创建 memcached 对象实例
12 $mc new memcached($options);
13 //   设置此脚本使用的唯一标识符
14 $key1 'mykey';
15 $key2 'mykey2';
16 //   往 memcached 中写入对象
17 $mc->add($key1'some random strings');
18 $mc->add($key2'some random strings2');
19 $val $mc->get($key1);
20 $keys array(
21 'mykey',
22 'mykey2',
23 );
24 $val2 $mc->get_multi($keys);//以数组中的键值获取一个数组的数据
25 //echo "n".str_pad('$mc->add() ', 60, '_')."n";
26 var_dump($val);
27 echo "get_multi:\r\n";
28 var_dump($val2);
29 //   替换已写入的对象数据值
30 $mc->replace($key1array('some'=>'haha''array'=>'xxx'));
31 $val $mc->get($key1);
32 //echo "n".str_pad('$mc->replace() ', 60, '_')."n";
33 var_dump($val);
34 //   删除 memcached 中的对象
35 $mc->delete($key1);
36 $val $mc->get($key1);
37 //echo "n".str_pad('$mc->delete() ', 60, '_')."n";
38 var_dump($val);
39 ?>

在实际应用中,通常会把数据库查询的结果集保存到 memcached 中,下次访问时直接从 memcached 中获取,而不再做数据库查询操作,这样可以在很大程度上减轻数据库的负担。通常会将 SQL 语句 md5() 之后的值作为唯一标识符 key。下边是一个利用 memcached 来缓存数据库查询结果集的示例(此代码片段紧接上边的示例代码):

1  
01 <?php
02 $sql 'SELECT * FROM users';
03 $key = md5($sql);   //memcached 对象标识符
04 {
05      //   在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
06      echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";
07      $conn = mysql_connect('localhost''test''test');
08      mysql_select_db('test');
09      $result = mysql_query($sql);
10      while ($row = mysql_fetch_object($result))
11          $datas[] = $row;
12      //   将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
13      $mc->add($key$datas);
14 {
15      echo "n".str_pad('Read datas from memcached.', 60, '_')."n";
16 }
17 var_dump($datas);
18 ?>

Memcache还可以用来存储session: 将php.ini中改为:

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,
可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval" 等等,类似这样的:
"tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2" 。

<?php
session_start();
$_SESSION["UserID"]=123;
echo session_id();
?>

用 sessionid 去 memcached 里查询一下:

<?php
$memcache = memcache_connect('localhost', 11211);
var_dump($memcache->get('19216821213cxycedec65b0883238c278eeb573e077'));
?>

用 memcache 来存储 session 在读写速度上会比 files 时快很多,而且在多个服务器需要共用 session

时会比较方便,将这些服务器都配置成使用同一组 memcached 服务器就可以,减少了额外的工作量。

缺点是 session 数据都保存在 memory 中,持久化方面有所欠缺。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值