`
sxysxy
  • 浏览: 216456 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

PHP模块:Memcached > Memcache

阅读更多

PHP搭配Memcached已经是妇孺皆知的标配了。再提似乎让人觉得太“圡”了,不过有一些细节不见得人人都清楚,比如说PECL里有两个Memcached的模块,MemcacheMemcached,目前大部分PHP环境里使用的是名字里不带d的Memcache版本,这个版本释出的比较早,是一个原生版本,与之对应的带d的Memcached版本则是建立在libmemcached的基础上,所以说Memcached版本的功能更全一些。

安装Memcached版本的PHP模块

wget http://download.tangent.org/libmemcached-0.35.tar.gz
tar zxf libmemcached-0.35.tar.gz
cd libmemcached-0.35
./configure
make
make install

wget http://pecl.php.net/get/memcached-1.0.0.tgz
tar zxf memcached-1.0.0.tgz
cd memcached-1.0.0
phpize
./configure
make
make install

打开php.ini加上:

extension = "memcached.so"

这样安装就结束了,你可以通过下列命令来确认:

php -m | grep mem

演示Memcached版本的新功能

先虚构一个问题,假设counter初始值是一个整数,不使用increment方法,通过get/set完成每次加一。

在Memcache版本里,我们只能按照大致如下的方式来进行:

$m = new Memcache();
$m->addServer('localhost', 11211);
$v = $m->get('counter');
$m->set('counter', $v + 1);

由于get/set这两个动作无法作为一个原子来操作,所以当多个进程同时处理时,会出现丢失的可能,更让人恼火的是,你根本就不知道什么时候出现丢失。

再看看Memcached版本里,我们是如何做的:

$md = new Memcached();
$md->addServer('localhost', 11211);
$v = $md->get('counter', null, $token)
$md->cas($token, 'counter', $v + 1);

cas是Memcached版本里提供的功能,说白了就是一个乐观锁的功能,如果你把$token的值var_dump出来,就会发现$token其实就是一个版本号,如果通过get得到的$token版本号在cas的时候不对应,就说明已经有别的操作更新了,此时cas操作会失败,至于如何继续操作,就看你自己了。

注:如果你想手动重现一下冲突的情况,可在get和cas之间sleep若干秒,并拷贝两份脚本,先后执行。

顺便说一句,推荐的Memcached版本模块的哈希设置如下:

$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);

总结

Memcached版本还有很多Memcache没有的功能,比如通过getByKey, setByKey等自动支持多个服务器,就不赘述了,该用哪个扩展已经不言自明了。

补充:http://code.google.com/p/memcached/wiki/PHPClientComparison

今天安装libmemcached安装时出错。找了下原因得到解决方法
报错片断
----------------------------------------------------------------------------------------------------------
CC clients/ms_stats.o
CC clients/ms_task.o
CC clients/ms_thread.o
CCLD clients/memslap
clients/ms_conn.o: In function `ms_get_

udp_request_id':
/var/go2packages/libmemcached-0.37/clients/ms_conn.c:184: undefined reference to `__sync_fetch_and_add_4'
clients/ms_conn.o: In function `ms_reconn_socks':
/var/go2packages/libmemcached-0.37/clients/ms_conn.c:1055: undefined reference to `__sync_fetch_and_add_4'
clients/ms_conn.o: In function `ms_reconn':
/var/go2packages/libmemcached-0.37/clients/ms_conn.c:924: undefined reference to `__sync_fetch_and_add_4'
/var/go2packages/libmemcached-0.37/clients/ms_conn.c:960: undefined reference to `__sync_fetch_and_add_4'
clients/ms_thread.o: In function `ms_setup_thread':
/var/go2packages/libmemcached-0.37/clients/ms_thread.c:215: undefined reference to `__sync_fetch_and_add_4'
clients/ms_thread.o:/var/go2packages/libmemcached-0.37/clients/ms_thread.c:198: more undefined references to `__sync_fetch_and_add_4' follow
collect2: ld returned 1 exit status
make[2]: *** [clients/memslap] Error 1
make[2]: Leaving directory `/var/go2packages/libmemcached-0.37'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/var/go2packages/libmemcached-0.37'
make: *** [all] Error 2

--------------------------------------------------------------------------------------------------------------------------
解决方法:

./configure --disable-64bit CFLAGS="-O3 -march=i686"
分享到:
评论

相关推荐

    php_memcache for win32 x86

    压缩包内包含: memcached-1.2.4.rar php_memcache-5.2-vc6-nts.rar ...php_memcache 是 PHP的扩展模块; memcached 是 php_memcache 的支持; nts 表示没有Not Thread Safety(非线程安全) vc6 表示使用 vc6.0 编译

    PHP模块 Memcached功能多于Memcache

    比如说PECL里有两个Memcached的模块,Memcache和...安装Memcached版本的PHP模块wget http://download.tangent.org/libmemcached-0.35.tar.gztar zxf libmemcached-0.35.tar.gzcd libmemcached-0.35./configuremak

    php模块memcache和memcached区别分析

    memcache:http://cn2.php.net/manual/en/book.memcache.php memcached:http://cn2.php.net/manual/en/book.memcached.php 2.Memcache是原生实现的,支持OO和非OO两套接口并存。而memcached是使用libmemcached

    【2014】php_memcache.dll 适用于PHP5.3.3版本(wampServer+memcache)

    增加一行extension=php_memcache.dll memcached.exe添加为系统服务启动 ===================== 作为学习和开发之用已经非常完美了,现在PHP官方也已经停止更新php5.2系列,所以升级自己的继承环境已经是势在必行的...

    memcache_php_cpanel:将Memcache PHP模块添加到cPanel EasyApache

    memcache_php_cpanel 将Memcache PHP模块添加到cPanel EasyApache 上游模块: : 重要的是要注意,这只会安装PHP模块。 如果要连接到本地memcached服务器,则需要单独安装memcached。 如今,在大多数任何Linux发行版...

    PHP扩展模块memcached长连接使用方法分析

    网上广泛流传着一篇文章,讲述php的两个扩展模块memcache和memcached的区别,其中特意强调了memcached与memcached一个很大的区别是memcached模块不支持长连接。以至于后来很多年我都认为memcached是不支持长连接的,...

    php memcache[windows]用法实例

    php memcache[windows]用法实例,记得先将php_memcache.dll文件拷贝至php相应dll文件目录,配置好php.ini文件的memcache模块,运行程序前先运行memcached.exe文件。

    基于php使用memcache存储session的详解

    web服务器的php session都给memcached ,这样你不管分发器把 ip连接分给哪个web服务器都不会有问题了,配置方法很简单,就在php的配置文件内增加一条语句就可以了,不过前提你需要装好memcache模块 1.设置session用...

    PHP5.3.3 专用 php_memcache.dll【亲测可用】

    增加一行extension=php_memcache.dll memcached.exe添加为系统服务启动 ===================== 作为学习和开发之用已经非常完美了,现在PHP官方也已经停止更新php5.2系列,所以升级自己的继承环境已经是势在必行的...

    kohana-memcached:用于 memcached 扩展的 Kohana 3 模块(不是 memcache)

    用于 memcached 扩展的 Kohana 3.3 模块(不是 memcache)。 请参阅。 执照: 你自由了: 分享——复制、分发和传播作品 混音——改编作品 在以下条件下: 署名 - 您必须以作者或许可人指定的方式对作品进行...

    PHP5.2、5.3、5.4、5.5、5.6的php memcache dll扩展

    memcache 扩展,PHP5.2、5.3、5.4、5.5、5.6, 32、64 位,以及其他版本下载地址

    windows下安装php的memcache模块的方法

    Memcache模块提供了于memcached方便的面向过程及面向对象的接口,memcached是为了降低动态web应用 从数据库加载数据而产生的一种常驻进程缓存产品。 下载memcache官网 PHP Memcache下载地址 另外附上64位memcache ...

    PHP模块memcached使用指南

    1.添加扩展包  php_memcache.dll 2.在PHP.INI添加  extension=php_memcache.dll 3.程序 复制代码 代码如下: <?php  //创建一个mem对象.../* if($mem->set(‘key1’,”beijing”,MEMCACHE_COMPRESSED,60)){  

    PHP框架Gaeaphp.zip

    具体配置文件项在/app/configs下|-db.php 数据库(Mysql)配置文件|-memcache.php 缓存(Memcache)配置文件|-route.php 路由配置文件|-smarty.php 模版引擎配置文件|-system.php 系统配置文件系统配置结构为一维数组,...

    PHP安装memcache扩展的步骤讲解

    PHP 5.6.23,查询目前最稳定的版本是memcache-2.2.7。 1.下载并解压缩。 wget http://pecl.php.net/get/memcache-2.2.7.tgz tar zxvf memcache-2.2.7.tgz 2. 编译。根据实际情况使用phpize和php-config。 [root@...

    php的memcached客户端memcached

    memcache的官方主页:http://pecl.php.net/package/memcachememcached的官方主页:http://pecl.php.net/package/memcached以下是我安装Memcached版本的PHP模块的过程记录:wget ...memcachedm

    UPUPW PHP v5.2.17 经典怀旧版套装 c1.zip

    memcache/2.2.5 高性能的分布式的内存对象缓存系统客户端。 Zend Debugger/5.2.15 PHP程序调试器,跟踪、调试和分析PHP程序的运行状况。  UPUPW PHP探针 支持服务器信息检测,PHP组件检测,PHP已编译模块检测,...

    MicroPHP(蜗牛微型PHP框架) v2.3.3.zip

    缓存支持:auto、apc、sqlite、files、memcached、redis、wincache、xcache、memcache。auto:自动模式。 缓存第二驱动 当你现在代码中使用的是memcached,然后代码转移到一个新服务器且不支持memcached,这时候...

Global site tag (gtag.js) - Google Analytics