[我的Linux,让Linux更易用]memcached是一套分布式的快取或缓存系统,当初是Danga Interactive为了LiveJournal所发展的,但目前被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权释出。
memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
memcached的API使用三十二位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于memcached通常只是当作快取系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程式码更新memcached内的资料。memcached具有多种语言的客户端开发包,包括:Perl/PHP/JAVA/C/Python/Ruby/C#/MySQL/客户端包的下载地址是:http://www.danga.com/memcached/apis.bml
下载和安装
memcache服务端安装
wget http://www.monkey.org/~provos/libevent-1.4.11-stable.tar.gz
wget http://danga.com/memcached/dist/memcached-1.4.0.tar.gz
tar -zxvf libevent-1.4.11-stable.tar.gz
cd libevent-1.4.11-stable
make clean
./configure --prefix=/usr
make;make install
tar zxvf memcached-1.4.0.tar.gz
cd memcached-1.4.0
./configure --prefix=/www/wdlinux/memcached --with-libevent=/usr
make;make install
安装完成,启动
/www/wdlinux/memcached/bin/memcached -d -m 512 -u apache -p 11211 -c 25600
-d 以守护进程方式启动
-m 512 是指分配512M内存
-u apache 是用apache用户启动
-p 11211 使用11211端口
-c 25600 最大的迸发连接数
PHP扩展(也就是客户端),也就是让PHP支持memcache (假设此服务器已配置好lamp或lnmp的应用环境,可安装我的定制版(http://www.wdlinux.cn/wdlinux_CentOS_5.5)
下载安装
wget http://pecl.php.net/get/memcache-2.2.5.tgz
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5
/www/wdlinux/php/bin/phpize
./configure --enable-memcache --with-php-config=/www/wdlinux/php/bin/php-config --with-zlib-dir
make;make install
在php.ini的最后添加如下几行,如 vi /www/wdlinux/php/lib/php.ini
[memcache]
extension_dir ="/www/wdlinux/php/lib/php/extensions/no-debug-zts-20060613/"
extension=memcache.so
重启apache
service httpd restart
memcache状态web界面接口,复制memcache.php到网站的根目录,如
cp memcache.php /www/web/wdlinux
修改用户密码,如下
vi memcache.php
define('ADMIN_USERNAME','wdlinux'); // Admin Username
define('ADMIN_PASSWORD','password'); // Admin Password
然后用IE浏览器打开 http://192.168.1.200/memcache.php,即可查看相关状态信息
打开phpinfo检查,如
http://192.168.1.200/phpinfo.php
能看如下图的信息,表示安装成功,也就是你的PHP已经支持memcache了
在你的PHP程序里,就可以使用memcache这个缓存数据库了
PHP测试实例
//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br />";
//替换数据
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//保存数组
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//清除所有数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//关闭连接
$mem->close();
?>