nginx+memcached构建页面缓存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+memcached构建页面缓存相关的知识,希望对你有一定的参考价值。
传统上php 中使用memcache 的方法是使用 php-memcache 或 php-memached 扩展操作 memcache ,在 nginx 上有构建更高效缓存机制的方法。就是 Nginx 直接访问 memcache ,并用 uri 和 args 等 Nginx 内置变量设定缓存 key 规则,这样,当缓存命中时, Nginx 可以跳过通过 fastcgi 和 PHP 通信的过程,直接从 memcache 中获取数据并返回。 memc-nginx 和 srcache-nginx 正是利用这种策略提高了缓存的效率。
当缓存命中时, Nginx 可以跳过通过 fastcgi和 PHP 通信的过程,直接从 memcache 中获取数据并返回
编译安装Nginx了,命令如下:
./configure--prefix=/usr/local/nginx \
--add-module=../memc-nginx-module\
--add-module=../srcache-nginx-module\
--add-module=../ngx_http_upstream_keepalive
make
make install
然后需要对nginx进行配置,nginx默认主配置文件放在安装目录的conf下,主配置文件为/usr/local/lnmp/nginx/conf/nginx.conf。
相关的配置
#Memcache服务upstream
upstream memcache {
server 172.25.80.1:11211;
}
server {
listen 80;
server_name server1;
#memc-nginx-module
location /memc {
internal;
memc_connect_timeout 100ms;
memc_send_timeout 100ms;
memc_read_timeout 100ms;
set $memc_key $query_string;
set $memc_exptime 300;
memc_pass memcache;
}
location / {
root /var/www;
index index.html index.htmindex.php;
}
#pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
charset utf-8;
default_type text/html;
#srcache-nginx-module
set $key $uri$args;
srcache_fetch GET /memc $key;
srcache_store PUT /memc $key;
root /var/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
}
}
$memc_key变量表示以什么作为key,这里直接使用Nginx内置的$query_string来作为key,$memc_exptime表示缓存失效时间,以秒记。这里统一设为300(5分钟),在实际应用中可以根据具体情况为不同的内容设置不同的过期时间。最后为“~ \.php$”这个location配置了缓存,这表示所有以“.php”结尾的请求都会结果被缓存 。
测试一共分三组进行:第一组在Nginx和PHP中均不开启缓存,第二组仅使用PHP memcache缓存,第三组仅使用Nginx memcache缓存。三组都用ab程序去压,并发数为20,请求次数为10000。
测试:
不开启缓存,脚本如下:
<?php
phpinfo();
?>
第二组我们用PHP操作缓存,测试脚本为:
<?php
$memc = new Memcached;
$memc->addServer(‘localhost‘, 11211) ordie(‘Connect to memcache server failed!‘);
$output = $memc->get(‘my_key‘);
if(empty($output)) {
ob_start();
phpinfo();
$output = ob_get_contents();
ob_end_clean();
$memc->set(‘my_key‘, $output, 300);
}
echo $output;
?>
测试结果如下:
最后,我们将PHP脚本回归到不使用缓存的版本,并配置好memc和srcache缓存机制。测试结果如下:
在各项指标上使用memc和srcache构建的缓存机制都大大优于使用PHP操作memcache。其中每秒处理请求数(并发度)和吞吐率都是其9倍左右,而平均个请求所用时间仅有传统策略的1/8。
本文出自 “12444971” 博客,请务必保留此出处http://12454971.blog.51cto.com/12444971/1930062
以上是关于nginx+memcached构建页面缓存的主要内容,如果未能解决你的问题,请参考以下文章
Nginx+Memcache+一致性hash算法 实现页面分布式缓存(转)