官方
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据.简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
+个人理解
1.它是基于C语言的Libevent库进行开发的
2.Memcache是一款C/S软件,这款软件是维护内存的.
3.是将数据在内存中使用,从内存中读取要比从硬盘中读取要快.
4.读取内存会减少对I/O设备的调用,从而加大访问速度.
5.内存是一个高速临时存储信息的硬件,断电后里面的信息将被清除.
6.硬盘是一个低速长期存储信息的硬件,断电后里面的信息将被保留.
守护进程
Memcache Defend(守护)
Memcached是以守护程序方式运行一个或多个服务器中,随时会接收客户端的连接和操作.
Memcache安装
1.编译安装Libevent
cd ~ curl -O http://www.monkey.org/~provos/libevent-2.0.13-stable.tar.gz tar -zxvf libevent-2.0.13-stable.tar.gz cd libevent-2.0.13-stable-tar.gz ./configure --prefix=/usr make ; make install
检测一下查看是否安装:
ls -al /usr/lib | grep libevent #显示 libevent.so -> libevent-2.0.so.5.1.2
2.安装Memcache
cd ~ curl -O http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz tar -zxvf memcached-1.4.0.tar.gz cd memcached-1.4.0.tar.gz ./configure --with-libevent=/usr/ make ; make install
检测是否成功安装
ls -al /usr/local/bin/mem* #显示 /usr/local/bin/memcached
开启Memcached守护进程
memcached -d -u root #无提证明开启成功 #连接参数 -p 监听端口 -l 连接的IP地址,默认是本机 -d start启动memecache服务 -d restart重启 -d stop|shutdown关闭服务 -d install 安装 -d uninstall 卸载 -u 以身份运行仅在root下有效 -m 最大内存使用,单位MB,默认64MB,最大2G -M 内存耗尽时返回错误 -c 最大同时连接数量,默认是1024 -f 块大小增长因为,默认是1.25 -n 最小分配空间,key+value+flags默认48 -h 显示帮助 #使用telnet连接 telnet localhost 11211 #直接按回车会出现客户端错误.
#查看当前状态命令
stats
stats参数参考
STAT pid 22459 进程ID STAT uptime 1027046 服务器运行秒数 STAT time 1273043062 服务器当前unix时间戳 STAT version 1.4.4 服务器版本 STAT pointer_size 64 操作系统字大小(这台服务器是64位的) STAT rusage_user 0.040000 进程累计用户时间 STAT rusage_system 0.260000 进程累计系统时间 STAT curr_connections 10 当前打开连接数 STAT total_connections 82 曾打开的连接总数 STAT connection_structures 13 服务器分配的连接结构数 STAT cmd_get 54 执行get命令总数 STAT cmd_set 34 执行set命令总数 STAT cmd_flush 3 指向flush_all命令总数 STAT get_hits 9 get命中次数 STAT get_misses 45 get未命中次数 STAT delete_misses 5 delete未命中次数 STAT delete_hits 1 delete命中次数 STAT incr_misses 0 incr未命中次数 STAT incr_hits 0 incr命中次数 STAT decr_misses 0 decr未命中次数 STAT decr_hits 0 decr命中次数 STAT cas_misses 0 cas未命中次数 STAT cas_hits 0 cas命中次数 STAT cas_badval 0 使用擦拭次数 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 15785 读取字节总数 STAT bytes_written 15222 写入字节总数 STAT limit_maxbytes 1048576 分配的内存数(字节) STAT accepting_conns 1 目前接受的链接数 STAT listen_disabled_num 0 STAT threads 4 线程数 STAT conn_yields 0 STAT bytes 0 存储item字节数 STAT curr_items 0 item个数 STAT total_items 34 item总数 STAT evictions 0 为获取空间删除item的总数
===================================================
4,安装memcache的PHP扩展(下载源码包、编译、安装、配置):
[root@youxia205 opt]# wget http://pecl.php.net/get/memcache-2.2.5.tgz
[root@youxia205 opt]# tar -zxvf memcache-2.2.5.tgz
[root@youxia205 opt]# cd memcache-2.2.5
[root@youxia205 memcache-2.2.5]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
[root@youxia205 memcache-2.2.5]# ./configure --enable-memcache -with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
[root@youxia205 memcache-2.2.5]# make
[root@youxia205 memcache-2.2.5]# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20060613/
[root@youxia205 memcache-2.2.5]# vi /usr/local/php/etc/php.ini
extension=memcache.so
四,测试memcache:
1,在网站目录下建立一个测试文件,名称为memtest.php,具体如下:
[root@youxia205 ~]# cd /usr/local/apache2/htdocs
[root@youxia205 htdocs]# vi memtest.php
<?php
$memcachehost = '192.168.0.205';
$memcacheport = 11211;
$memcachelife = 60;
$memcache = new Memcache;
$memcache->connect($memcachehost,$memcacheport) or die ("Could not connect");
$query="select * from personal_info limit 10";
$key=md5($query);
if(!$memcache->get($key))
{
$conn=mysql_connect("localhost","root","user");
mysql_select_db(mydb);
$result=mysql_query($query);
while ($row=mysql_fetch_assoc($result))
{
$arr[]=$row;
}
$f = 'mysql';
$memcache->add($key,serialize($arr),0,30); //mysql 查询后,插入 memcached
$data = $arr ;
}
else{
$f = 'memcache';
$data_mem=$memcache->get($key);
$data = unserialize($data_mem);
}
echo $f;
echo "<br>";
//print_r($data);
foreach($data as $a)
{
echo "number is <b><font color=#FF0000>$a[pi_id]</font></b>";
echo "<br>";
echo "name is <b><font color=#FF0000>$a[pi_name]</font></b>";
echo "<br>";
echo "tel is <b><font color=#FF0000>$a[pi_tel]</font></b>";
echo "<br>";
echo "qq is <b><font color=#FF0000>$a[pi_qq]</font></b>";
echo "<br>";
echo "email is <b><font color=#FF0000>$a[pi_email]</font></b>";
echo "<br>";
}
?>
2,执行测试:
#执行的时候报错
Fatal error: Class 'Memcache' not found in /usr/local/apache2/htdocs/memtest.php on line 5
#解决方法如下:
[root@youxia205 htdocs]# find / -name memcache.so
/usr/local/php/lib/php/extensions/no-debug-zts-20060613/memcache.so
/opt/memcache-2.2.5/.libs/memcache.so
/opt/memcache-2.2.5/modules/memcache.so
vi /usr/local/php/etc/php.ini
extension_dir = "./"
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20060613"
再次执行:
查看数据库中正在执行的语句,没有发现对mydb库执行查询的线程,说明PHP直接从memcache中提取的数据:
mysql> show processlist;
+-----+----------+-----------------+-------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+----------+-----------------+-------+---------+------+-------+------------------+
| 697 | prog | localhost:44175 | word | Sleep | 23 | | NULL |
| 698 | prog | localhost:44176 | word | Sleep | 23 | | NULL |
| 744 | user | localhost | mydb | Sleep | 3443 | | NULL |
| 747 | user | localhost | NULL | Query | 0 | NULL | show processlist |
+-----+----------+-----------------+-------+---------+------+-------+------------------+
4 rows in set (0.00 sec)
本篇文章来源于 Linux公社网站 原文链接:http://www.linuxidc.com/Linux/2010-08/28206p4.htm