Memcached是高性能的,分布式的内存对象缓存系统 ,用于在动态应用中减少数据
库负载 ,提升访问速度。
Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ
每秒动态页面访问量几千次,用户700万。Memcached将数据库 负载大幅度降低,
更好的分配资源,更快速访问。
首先我在windows下实现它,过后再在linux试试.
下载memcached-win32 和php_memcache.dll(要和php的版本对应上)
1.memcahced下载后,压缩之前发现不到100K,压缩后也不到200K,这东西居然有这
么神奇,放到C盘,进入目录里面有一个memcached.exe,双击就启动了,让窗口开着,
或者在cmd里面c:\memcached\memcached.exe -d start 都可以启动
2.修改php.ini的配制文件
加入extension=php_memcache.dll 这一行代码,位置无所谓
3.php_memcache.dll放到php的安装文件中,一般在php源码的ext目录下
4.重启apache后,查看一下phpinfo(写一个phpinfo()函数就可以看到),如果有
memcache,那么就说明安装成功
开始测试一下代码
$mem = new Memcache;
$mem->connect(”127.0.0.1″, 11211);
$mem->set(’key’, ‘This is a memcached test!’, 0, 60);
$val = $mem->get(’key’);
echo $val;
如果输出This is a memcached test!刚表明安装成功
1.下载Memcache for win32
下载地址: http://jehiah.cz/projects/memcached-win32/
选择memcached 1.2.1 for Win32 binaries (Dec 23, 2006) 是exe的程序
2.下载php_memcache.dll
下载地址: http://pecl4win.php.net/ext.php/php_memcache.dll
选择和Php版本对应的,我php版本是5.2.6的,里边没有,索性down了个5.2.1的也能用
打开php.ini文件,添加扩展extension=php_memcache.dll(没有分号)
重启apache
phpinfo看一下,现在应该有memcached的了
memcache主要应用方法:
(1) Memcache::getVersion 返回memcache的版本信息.
(2) Memcache::connect 创建一个memcache连接对象.
(3) Memcache::pconnect 创建一个memcacher持久连接对象.
(4) Memcache::close 关闭一个Memcache对象.
(5) Memcache::set 用来添加一个值.
有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存,第四个参数可选,用来设
置一个过期自动销毁的时间.
(6) Memcache::add 作用和Memcache::set方法类似.
两个方法的区别是如果Memcache::add方法的返回值为false,表示这个key已经存在,而Memcache::set方法则会直
接覆写.
(7) Memcache::get 用来获取一个值.
只有一个参数(key,在Memcache::set时设置)
(8) Memcache::replace 对一个已有的key进行覆写操作.
有四个参数,与 Memcache::set 相同.
(9) Memcache::increment 对保存的某个key中的值进行加法操作.
(10) Memcache::decremen 对保存的某个key中的值进行减法操作.
(11) Memcache::setCompressThreshold 对大于某一大小的数据进行压缩。
(12) Memcache::delete 删除一个key
有两个参数,第一个是key名称.第二个是删除延迟时间
(13) Memcache::flush 清除所有缓存的数据,但是不会削去使用的内存空间.
(14) Memcache::addServer 添加一个可供使用的服务器地址.
(15) Memcache::setServerParams 在运行时修改服务器的参数.
写个php程序测试一下:
PHP代码:
<?php
/*创建memcached对象*/
$mem = new Memcache ();
/*创建一个链接,memcache默认端口是11211*/
$mem -> connect ( '127.0.0.1' , 11211 );
/*查询数据*/
$sql = "select `username` from `hao_users` where 1=1 limit 5000" ;
/*缓存键*/
$key = md5 ( $sql );
if(!( $mem -> get ( $key )))
{
$link = mysql _connect ( "219.153.41.215" , 'root' , '**' );
mysql_select_db ( 'oldhaocpc' );
$res = mysql_query ( $sql );
while( $row = mysql_fetch_array ( $res ))
{
$arrdata [] = $row ;
}
$mem -> set ( $key , $arrdata );
}
$data = $mem -> get ( $key )? $mem -> get ( $key ): $arrdata ;
/*输出测试*/
echo '<pre>' ;
print_r ( $data );
/*关闭memcached连接*/
$mem -> close ();
?>
为了做测试,连接的是远程数据库 。看到的效果比较明显。
---------------------------------------------------------------------
下载Windows的Server端
下载地址:http://code.jellycan.com/memcached/
安装Memcache Server(也可以不安装直接启动)
1. 下载memcached的windows稳定版,解压放某个盘下面,比如在c:\memcached
2. 在CMD下输入 "c:\memcached\memcached.exe -d install" 安装.
3. 再输入:"c:\memcached\memcached.exe -d start" 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
如果下载的是二进制的版本,直接运行就可以了,可以加上参数来加以设置。
常用设置:
-p <num> 监听的端口
-l <ip_addr> 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u <username> 以<username>的身份运行 (仅在以root运行的时候有效)
-m <num> 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c <num> 最大同时连接数,默认是1024
-f <factor> 块大小增长因子,默认是1.25
-n <bytes> 最小分配空间,key+value+flags默认是48
-h 显示帮助
启动该服务后,memcached服务默认占用的端口是11211,占用的最大内存默认是64M。
在修改这2个配置选项就碰到了一些问题,网上搜索了很多资料,都说使用下面的命令启动服务就可以:
c:memcachedmemcached.exe -p 12345 -m 1024 -d start , -p 表示要修改的端口, -m表示占用的最大内存(单位为M)。
但是无论怎么调用这个命令,发现端口一直还是11211。
打开windows服务控制面板一看,发现memcached.exe 默认安装的服务器启动参数中根本没写-p -m的参数,只有1个 -d runservice参数。
所以不管用什么命令启动服务都是没用的,见下图:
于是就想到直接修改windows服务的启动参数,操作如下,打开注册表,找到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server
其中的ImagePath项的值为:"c:memcachedmemcached.exe" -d runservice
改成:"c:memcachedmemcached.exe" -p 12345 -m 128 -d runservice
保存后重新启动memcached服务,然后在命令行中输入netstat -n -a 看看现在端口是不是改啦,^_^。