php使用memcache提高性能


区分memcache和memcached
对于内存缓存,比较常用的有两种memcache和memcached扩展。而memcached和memcache的守护进程memcached同名,
比较容易引起混淆,甚至提到memcached,有些人第一想到的是后台的守护进程,这里还是有必要分析一下两者之间的区别,
memcache是完全在PHP框架内开发的,memecached是使用libmemcached的。从手册上看,memcached 会比 memcache 多几个方法,使用方式上都差不多。
memcache是原生实现的,但是使用libmemcached的memached只支持OO接口,而 memcache则是OO和非OO两套接口并存,以后随着memcached服务器端的改进,这个lib也必定会马上跟进的。而memcache却不一定能做到按时跟进。
memcached,还有个非常称赞的地方,就是flag不是在操作的时候设置了。而是有一个统一的setOption()。memcached 实现了更多的 memcached 协议(毕竟是基于 libmemcached 库的)。
这里有另外一个对比表,很明显,用 memcached 会让人放心很多:http://code.google.com/p/memcached/wiki/PHPClientComparison
差别比较大的一点是,memcached 支持 Binary Protocol,而 memcache 不支持,意味着 memcached 会有更高的性能。不过,还需要注意的是,memcached 目前还不支持长连接。


在ubuntu中安装memcached
sudo apt-get install memcached   //安装
memcached -d -m 128 -p 11211 -u root   //开启memcached服务
memcached服务的参数:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48
-h 显示帮助2)安装Memcache客户端 


安装php-memcache扩展
sudo apt-get install php5-memcache
安装完以后我们需要在php.ini里进行简单的配置,打开/etc/php5/apache2/php.ini文件在末尾添加如下内容:


[Memcache]
; 一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,  
; 它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。  
  
; 是否在遇到错误时透明地向其他服务器进行故障转移。  
memcache.allow_failover = On  
  
; 接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。  
memcache.max_failover_attempts = 20  
  
; 数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。  
; 如果发现无法解释的速度降低,可以尝试将此值增加到32768。  
memcache.chunk_size = 8192  
  
; 连接到memcached服务器时使用的默认TCP端口。  
memcache.default_port = 11211  
  
; 控制将key映射到server的策略。默认值”standard”表示使用先前版本的老hash策略。  
; 设为”consistent”可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。  
;memcache.hash_strategy = "standard"  
  
;控制将key映射到server的散列函数。默认值”crc32″使用CRC32算法,而”fnv”则表示使用FNV-1a算法。  
; FNV-1a比CRC32速度稍低,但是散列效果更好。  
;memcache.hash_function = "crc32" 


重启apache服务器


现在可以在php中使用memcache了


<?php
header("Content-type: text/html; charset=utf-8"); 
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$version = $memcache->getVersion();
echo "服务端版本信息: ".$version."<br/>\n";
$key = 'cskey';
$val = 'csvalue';
$memcache->set($key, $val, false, 10) or die ("Failed to save data at the server");
echo "将数据保存到缓存中(数据10秒后失效)<br/>\n";
echo  $memcache->get($key);
?>




在php手册中:  函数参考-其他服务-Memcache找到详细的使用方法
在Memcache的下面一个服务就是Memcached,大部分使用方法差不多,我上面的代码针对Memcache,
Memcached的用法有一些区别,


上面的内容只能让你知道怎么用,对于Memcache的原理是不明白的,只有知道原理才能用的得心用手


这篇文章写的不错,http://www.ibm.com/developerworks/cn/opensource/os-memcached/index.html?ca=drs-


如果看完这篇文章还是有些模糊的话,就网上多找几篇琢磨,反正我是看了好几篇文章仔细琢磨了才算通明




理论说的在多,实际中很多时候却下不到手,没事我来说一些使用情况


我的网站有个文章推荐列表,一般推荐文章的浏览量很大,在没有用memcache的时候点击文章的标题就要到数据库里面取回数据,服务器很吃力,用了memcache后,第一次访问后我们就把内容缓存到memcache,下次如果有用户再次访问这篇文章,那么就直接在缓存中取出来,前提是这个数据在我们设置的有效期内,这样就省去了连接数据库的开销;
文章下面还有评论模块,页面第一次显示后任然是缓存起来,下次直接从缓存中取出,如果有新添加的评论,那么在后台代码插入到数据库的同时在把数据写到memcache里面,有新评论后模块的内容任然可以马上更新到最新的版本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章