首页 运维 网络学院 查看内容

Nginx实践:用memcached模块加速PHP应用程序

2009-10-5 12:19 1182 0

摘要:   Memcached,就不多说了,地球人都知道.   Nginx有一个memcached_module,可以直接从后端的memached服务器中读取内容,   直接输出.   通过这个模块,可...
关键词: Memcached 缓存 missing 模块 因此 fastcgi 内容 module server Nginx

  Memcached,就不多说了,地球人都知道.   Nginx有一个memcached_module,可以直接从后端的memached服务器中读取内容,   直接输出.   通过这个模块,可以极大的提升动态页面的访问速度.   我的实践中, 曾经用这个模块快速的解决了由于代码造成的一些瓶颈问题.   memcached可以通过upstream来从多台memcached服务器中读取,也可以支持热备份.   下面是我的完整例子   upstream memcached {   server 192.168.8.11:11211;   server 192.168.8.10:11211;   }   server {   listen 80;   server_name t.night9.cn;   limit_conn one 10;   charset utf-8;   access_log /logs/web/t.log main;   root /www/app/web;   default_type text/html;   index app;   location = / {   set $memcached_key $host$uri;   default_type text/html;   memcached_pass memcached;   error_page 404 = /missing;   }   location /missing {   internal;   rewrite ^/missing$ /app/site/blog last;   }   include php_app.conf;   }   在这个例子中, nginx首先从memcached中读取(缓存的key可以用memcached_key来设置.),   如果命中,则直接输出内容,注意,需要设置default_type ,否则可能不能正常显示.   如果没有命中,memcached_module会返回404,因此可以用 error_page 404来转发到后端的应用程序,   本例中是先转发到/missing ,而/missing则重写到实际的后端应用地址中.   Nginx只负责从memcached中读取内容,但不负责设置.因此,需要你的应用程序自行将相应的页面缓存   设置到memcached中.   在我的部署中, 我是通过设置一个PAGE_CACHE_ID给php的fastcgi:   (在fastcgi_params中加入):   fastcgi_param PAGE_CACHE_ID $memcached_key;   php程序一旦检测到这个环境变量,   那么会自动将当前页面的内容设置到memcached缓存中,由于是在php框架中自动作的,所以可以随时切换,不需要修改.   缺点:   很多事情都不是那么完美, 对于nginx的这个module,其最大的问题就是不支持压缩,   因此,在使用php的memcache函数设置缓存时,必须取消压缩,否则将无法正确输出.   这样带来的一个小问题就是:   由于一般页面至少数k以上,这样对于内存的消耗是比较大.   因此, 在这个module支持压缩之前, 可以考虑备选方案:   使用独立的FASTCGI服务器来替换memcache模块.   通过CPAN模块,实现起来非常简单!
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部