两个扩展的介绍基本一样(memcache, memcached),没有任何特别关于他们之间区别的说明. 那我们什么时候应该用哪个扩展呢?

Stackoverflow上有比较详细的讨论: using memcache vs memcached with phpmemcache vs memcached

这里还有一个很清晰表格,对比了这两个扩展的具体特性.
主要区别是php memcached扩展比较新,几乎支持memcached的所有特性(如Delayed Get, Append/Prepend等). 但是它依赖libmemcached才能运行(在debian里面包名是libMemcached5).
所以如果你不使用如Delayed Get这样的特性,又不想多依赖libmemcached库, 完全可以使用memcache扩展. 反之请选择memcached扩展.

不过debian和ubuntu上直接用apt-get install php5-memcached安装的php memcached扩展,libmemcached库有些问题. 很多人报告不能正常使用. memcache扩展由于不依赖libmemcached库,没这个问题.
我的debian 6上也有这个毛病. 必须手工编译libmemcached才行, 命令如下.

apt-get remove php5-memcached

wget http://launchpad.net/libmemcached/1.0/0.50/+download/libmemcached-0.50.tar.gz
tar -zxvf libmemcached-0.50.tar.gz
cd libmemcached-0.50
./configure
make
make test
make install
cd ..

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

然后在/etc/php5/apache2/conf.d/memcached.ini里开启php memcached扩展.
重启apache, 应该就ok了.

你可以用这段php片段测试一下

$m = new Memcached();
var_dump($m);
echo $m->addServer('localhost', 11211);

echo $m->set('int', 99);
echo $m->set('string', 'a simple string');
echo $m->set('array', array(11, 12));
/* expire 'object' key in 5 minutes */
echo $m->set('object', new stdclass, time() + 300);


var_dump($m->get('int'));
var_dump($m->get('string'));
var_dump($m->get('array'));
var_dump($m->get('object'));

相关文章

    共享到: