一、Memcached介绍
1、什么是Memcached?
Memcached是国外社区网站LiveJournal的开发团队开发的高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
2、Memcached的运行图
二、Memcached安装和使用
1、Memcached安装
安装步骤:先安装libevent,再安装Memcached主程序
安装libevent:
yum –y install libevent*
再安装Memcached:
tar -xzf memcached-1.4.10.tar.gz
cd memcached-1.4.10
./configure --prefix=/usr/local/memcache
make && make install
useradd memcache
passwd memcache
2、 Memcached运行
启动Memcached:
/usr/local/memcache/bin/memcached -p 11211 -u memcache &
关闭服务:
kill %1 #1表示为后台服务的数字标识
查看Memcached帮助信息:
/usr/local/memcache/bin/memcached –h
检查是否正常启动:
ps –aux | grep memcached
或
netstat –tunpl | grep :11211
或
telnet 192.168.10.1 11211 #测试连接状态
stats #统计Memcached的各种信息
3、Memcached和PHP结合使用
(1)、需要安装PHP Memcache扩展
编译安装memcache
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
配置:
ls -l /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/memcache.so
vi /usr/local/php/etc/php.ini
新增以下配置内容:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension="memcache.so"
检查安装结果:
/usr/local/php/bin/php –m
/usr/local/apache2/bin/apachectl restart
(2)、PHP和Memcache结合的测试代码
<?php
//连接memcache
$mem = new Memcache;
$mem->connect('localhost',11211);
//保存数据
$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('aa','bb','cc');
$mem->set('key2',$arr,0,60);
$val2 = $mem->get('key2');
echo "Get key2 value:";
echo "<pre>";
print_r($val2);
//关闭连接
$mem->close();
?>
(3)、PHP和Memcache分布式:在一台或者多台机器启用一个或者多个进程,这里是在一台机器启用两个进程,使用两个接口:
/usr/local/memcache/bin/memcached –u memcache –p 11211 &
/usr/local/memcache/bin/memcached –u memcache –p 11212 &
/usr/local/memcache/bin/memcached –u memcache –p 11213&
示例代码:
<?php
//连接memcache
$mem = new Memcache;
$mem->addServer('localhost',11211);
$mem->addServer('localhost',11212);
$mem->addServer('localhost',11213);
//保存数据
$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('aa','bb','cc');
$mem->set('key2',$arr,0,60);
$val2 = $mem->get('key2');
echo "Get key2 value:";
echo "<pre>";
print_r($val2);
echo "</pre>";
//关闭连接
$mem->close();
?>
另外,PHP作为memcached客户端实现起来很简单,在实际应用中,通常会把数据库查询的结果集保存到 memcached 中,下次访问时直接从 memcached 中获取,而不再做数据库查询操作,这样可以在很大程度上减轻数据库的负担。通常会将 SQL 语句 md5() 之后的值作为唯一标识符 key。
下边是一个利用 memcached 来缓存数据库查询结果集的示例:
<?php
$mc = new memcached();
$sql = 'SELECT * FROM users';
$key = md5($sql); //memcached 对象标识符
if ( !($datas = $mc->get($key)) ) {
// 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db('test');
$result = mysql_query($sql);
while ($row = mysql_fetch_object($result))
$datas[] = $row;
// 将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
$mc->add($key, $datas);
} else {
echo "n".str_pad('Read datas from memcached.', 60, '_')."n";
}
var_dump($datas);
?>