快速业务通道

Memcached深度分析

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-26
p;   //1000000/200
◎Memcached客户端

Memcached是一个服务程序,使用的时候可以根据它的协议,连接到memcached服务器上,发送命令给服务进程,就可以操作上面的数据。为了方便使用,memcached有很多个客户端程序可以使用,对应于各种语言,有各种语言的客户端。基于C语言的有libmemcache、APR_Memcache;基于Perl的有Cache::Memcached;另外还有Python、Ruby、Java、C#等语言的支持。PHP的客户端是最多的,不光有mcache和PECL memcache两个扩展,还有大把的由PHP编写的封装类,下面介绍一下在PHP中使用memcached的方法:

mcache扩展是基于libmemcache再封装的。libmemcache一直没有发布stable版本,目前版本是1.4.0-rc2,可以在这里找到。libmemcache有一个很不好的特性,就是会向stderr写很多错误信息,一般的,作为lib使用的时候,stderr一般都会被定向到其它地方,比如Apache的错误日志,而且libmemcache会自杀,可能会导致异常,不过它的性能还是很好的。

mcache扩展最后更新到1.2.0-beta10,作者大概是离职了,不光停止更新,连网站也打不开了(~_~),只能到其它地方去获取这个不负责的扩展了。解压后安装方法如常:phpize & configure & make & make install,一定要先安装libmemcache。使用这个扩展很简单:


CODE:[Copy to clipboard]<?php
$mc = memcache();    // 创建一个memcache连接对象,注意这里不是用new!
$mc->add_server(''localhost'', 11211);    // 添加一个服务进程
$mc->add_server(''localhost'', 11212);    // 添加第二个服务进程
$mc->set(''key1'', ''Hello'');    // 写入key1 => Hello
$mc->set(''key2'', ''World'', 10);    // 写入key2 => World,10秒过期
$mc->set(''arr1'', array(''Hello'', ''World''));    // 写入一个数组
$key1 = $mc->get(''key1'');    // 获取''key1''的值,赋给$key1
$key2 = $mc->get(''key2'');    // 获取''key2''的值,赋给$key2,如果超过10秒,就取不到了
$arr1 = $mc->get(''arr1'');    // 获取''arr1''数组
$mc->delete(''arr1'');    // 删除''arr1''
$mc->flush_all();    // 删掉所有数据
$stats = $mc->stats();    // 获取服务器信息
var_dump($stats);    // 服务器信息是一个数组
?>
这个扩展的好处是可以很方便地实现分布式存储和负载均衡,因为它可以添加多个服务地址,数据在保存的时候是会根据hash结果定位到某台服务器上的,这也是libmemcache的特性。libmemcache支持集中hash方式,包括CRC32、ELF和Perl hash。

PECL memcache是PECL发布的扩展,目前最新版本是2.1.0,可以在pecl网站得到。memcache扩展的使用方法可以在新一些的PHP手册中找到,它和mcache很像,真的很像:


CODE:[Copy to clipboard]<?php

$memcache = new Memcache;
$memcache->connect(''localhost'', 11211) or die ("Could not connect");

$version = $memcache->getVersion();
echo "Server''s version: ".$version."n";

$tmp_object = new stdClass;
$tmp_object->str_attr = ''test'';
$tmp_object->int_attr = 123;

$memcache->set(''key'', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)n";

$get_result = $memcache->get(''key'');
echo "Data from the cache:n";

var_dump($get_res

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号