Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。
eAccelerator和 memcached 是目前较为主流的两个可使用在PHP之中的缓存加速工具,以下为Memcached与eAccelerator 的区别:
eAccelerator作为PHP的扩展库存在,那么仅在PHP运行时,可以操作和读写共享内存,一般情况,只能由操作共享内存的程序自己调用。同时,eAccelerator 可以缓存PHP程序的执行代码,提升程序的调入和执行速度。
Memcached 主要作为一个共享内存服务器,其PHP扩展库仅仅作为PHP到 memcached 的连接库存在,类似MySQL扩展库.因而,Memcached 可以完全脱离PHP,其共享的数据,可以被不同的程序调用.
eAccelerator 主要用于单机PHP提速,缓存中间数据.对于实时性高,但数据操作量小的情况下;Memcache用于分布式或者集群系统,多台服务器可以共享数据.对于实时性高,同时数据操作量大的情况。
周末在张宴的博客上看到那么一句话“使用PHP的XCache、APC等加速模块会提供速度10倍左右,降低系统负载50倍以上”,于是我安装了Memcached 。
1、先安装libevent ,一般操作系统上有带,我的就是。
你可以使用以下语句查询:
ls -al /usr/lib | grep libevent
出现以下便说明已安装好的了。
2、安装 Memcached,因为我之前安装的是 LNMP 一键包,软件是已下载好的了。
cd lnmp0.8
./memcached.sh
如果你不知道自己的系统有木有的话,可用
yum search memcached
寻找。
3、安装 PHP 的 Memcached 模块
cd lnmp0.8
cd memcache-3.0.6
/usr/local/php/bin/phpize
./configure –enable-memcache-with-php-config=/usr/local/php/bin/php-config -with-zlib-dir
make
make install
手动编译就是麻烦,如果不知道phpize在什么位置,可以用
find / -name phpize
查找
记录下安装成功后的提示,类似于:
Installing shared extensions: /usr/lib/php/extensions/.../
把这个地址记录下来,修改php.ini文件。
vi /usr/local/php/etc/php.ini
在Zend Optimize 前面加上
extension_dir = "/usr/local/php/lib/php/extensions/...../"
extension=memcache.so
最后验证一下是否安装完成
php -m|grep memcache
应该会显示 memcache, 如果出现类似的错误:
PHP Warning: Module ‘memcache’ already loaded in Unknown on line 0
那可以把上面在php.ini 增加的那两句话删去。
当然,你还可以使用 phpinfo.php 查看 Memcached 模块是不是已被安装,显示如下:
4、启动 Memcached,你的安装地址可能不同,输入以下命令:
usr/local/memcached/bin/memcached -d -m 16 -p 11211 -l 127.0.0.1 -u root -c 256
-d:启动一个守护进程,
-m:分配给Memcache使用的内存数量,单位是MB,默认是64MB(对于我的网站,16M即可)
-u:运行Memcache的用户
-l:监听的服务器IP地址
-p:设置Memcache监听的端口,默认是11211注:-p(p为小写)
-c:设置最大并发连接数,默认是1024
-P:设置保存Memcache的pid文件注:-P(P为大写)
-h 显示帮助
5、1)测试是否安装成功
netstat -tap | grep memcached
查看是否已运行
2)你还可运行下面的 php 文件,如果有输出 This is a test!,就表示环境搭建成功。
< ?php $mem = new Memcache; $mem->connect("127.0.0.1", 11211);
$mem->set('key', 'This is a test!', 0, 60);
$val = $mem->get('key');
echo $val;
?>
3)还可以根据访问http://你的域名/memcached.php 看看是否出现以下内容:
Memcached Server version: 1.4.7
Get key1 value: This is first value
Get key1 value: This is replace value
Get key2 value: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
Get key1 value:
Get key2 value:
4)使用命令
telnet 127.0.0.1 11211
对Memcached缓存服务的状态查询,可以先telnet连接上服务:telnet 127.0.0.1 11211 ,然后使用 stats命令查看缓存服务的状态,会返回如下的数据:
time: 1255537291 (服务器当前的unix时间戳)
total_items: 54 (从服务器启动以后存储的items总数量 )
connection_structures: 19 (服务器分配的连接构造数)
version: 1.2.6 (Memcache版本)
limit_maxbytes: 67108864 (分配给memcache的内存大小字节)
cmd_get: 1645 (get命令(获取)总请求次数)
evictions: 0 (为获取空闲内存而删除的items数)
total_connections: 19 (从服务器启动以后曾经打开过的连接数)
bytes: 248723 (当前服务器存储items占用的字节数)
threads: 1 (当前线程数)
get_misses: 82 (总未命中次数)
pointer_size: 32 (当前操作系统的指针大小(32位系统一般是32bit)
bytes_read: 490982 总读取字节数(请求字节数)
uptime: 161 (服务器已经运行的秒数)
curr_connections: 18 (当前打开着的连接数)
pid: 2816 (memcache服务器的进程ID )
bytes_written: 16517259 总发送字节数(结果字节数)
get_hits: 1563 (总命中次数)
cmd_set: 54 (set命令(保存)总请求次数)
curr_items: 28 (服务器当前存储的items数量)
安装好 memcached 后,我唯一的问题就是无法显示图形界面监控图。我折腾了两天都弄不好,就没有再去弄了。
讲解的很详细,辛苦了!
自己玩VPS,很不错。我都没折腾过这东西。看了你的介绍,是我见过写得最长的,也是色彩最丰富的一篇。所以很容易记住~
学习了,不错,正要研究
小网站暂使不上这技术。