在PHP使用MemCached
在PHP中使用Memcached,有两种方式,一种是安装PHP的memcache扩展(实际上还有另外一个memcached扩展,是基于比较流行的libmemcached库封装的),该扩展是用c写的,效率较高,需要在服务器上安装。另外一种则是直接使用客户端的php-memcached-client类库,但是这个我在网上找了半天也没找到一个官方的网站。所以呢,还是装个扩展吧。假设php安装在/home/admin/php目录:
wget http://pecl.php.net/get/memcache-2.2.5.tgz gzip -d memcache-2.2.5.tgz tar xvf memcache-2.2.5.tar cd memcache-2.2.5 /home/admin/php/bin/phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519 ./configure --enable-memcache --with-php-config=/home/admin/php/bin/php-config --with-zlib-dir Installing shared extensions: /home/admin/php/lib/php/extensions/no-debug-non-zts-20060613/
注意到最后一行返回的信息,将下面两行添加到/home/admin/php/lib/php.ini
extension_dir = "/home/admin/php/lib/php/extensions/no-debug-non-zts-20060613/" extension=memcache.so
然后重启web服务器即可。如果安装成功,则通过phpinfo()可以获得该扩展的相关信息:
memcache support | enabled |
---|---|
Active persistent connections | 0 |
Version | 2.2.5 |
Revision | $Revision: 1.111 $ |
Directive | Local Value | Master Value |
---|---|---|
memcache.allow_failover | 1 | 1 |
memcache.chunk_size | 8192 | 8192 |
memcache.default_port | 11211 | 11211 |
memcache.default_timeout_ms | 1000 | 1000 |
memcache.hash_function | crc32 | crc32 |
memcache.hash_strategy | standard | standard |
memcache.max_failover_attempts | 20 | 20 |
以上参数都可以在php.ini中进行设置。下面是一段官方网站的php测试代码:
<?php $memcache = new Memcache; $memcache->connect('127.0.0.1', 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_result); ?>
运行后输出如下:
Server's version: 1.2.6 Store data in the cache (data will expire in 10 seconds) Data from the cache: object(stdClass)#3 (2) { ["str_attr"]=> string(4) "test" ["int_attr"]=> int(123) }