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算法 实现页面分布式缓存(转)

openresty

memcached实现LNMP对php页面的缓存

memcached + nginx

Memcache缓存服务器(Nginx+php+Memcache+MySQL)

memcached