Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760637
  • 博文数量: 291
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7924
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 14:28
个人简介

阿里巴巴是个快乐的青年

文章分类

全部博文(291)

文章存档

2018年(21)

2017年(4)

2016年(5)

2015年(17)

2014年(68)

2013年(174)

2012年(2)

分类: Web开发

2013-10-27 20:57:36

        由于Nginx的标准Memcached模块没有完全实现Memcached协议,只能读取Memcached而不能写入,所以目前流行的cache方案如下图所示:
        Nginx读取Memcached,如果失败,那么把请求转发给后台的服务器,并返回结果,后台服务器处理结束后,还需要把结果写入Memcached,这样下次请求到Nginx的时候就可以直接从Memcached读取数据了。本文介绍的就是这种解决方案,类似解决方案还可以参看,还有。
一、安装
1、安装Libevent
        #yum install libevent libevent-devel
2、安装Memcached
        点击下载Memcached,执行如下命令安装Memcached:
        #tar -zxvf memcached-1.4.15.tar.gz
        #cd memcached-1.4.15
        #./configure
        #make
        #make install
        Memcached默认安装到/usr/local/bin下,执行如下命令可以启动Memcached:
        #/usr/local/bin/memcached -p 11211 -m 64m -d
        上面命令用daemon后台启动Memcached,监听11211端口,最大内存使用量为64M.      
3、安装Nginx
        Nginx安装可以参看这里,但需要注意的是在编译前要先安装并在configure时加入ngx_http_memcached_module:
        #./configure --add-module=../HttpMemcachedModule

二、配置
        #vi /etc/nginx/nginx.conf
        user usr usr;
        worker_processes 2;
        #
        http {
            types {
                text/javascript js;
                application/xml xml;
            }
            #
            # By default, return content sa
            default_type application/xml;
            #
            access_log /home/api/logs/nginx.log main;
            #
            sendfile on;
            tcp_nopush on;
            #
            keepalive_timeout 65;
            tcp_nodelay on;
            #
            # app. server(s) / cluster definition
            upstream dynamic_srv { server 127.0.0.1:9020; }
            #
            server {
                listen 9000;
                server_name srv;
                root /home/usr;
                #
                # Match any request that begins with /dynamic_request
                location /dynamic_request {
                    #
                    # Append a file-extension to every request
                    if ($args ~* format=json) { rewrite ^/dynamic_request/?(.*)$ /dynamic_request.js$1 break; }
                    if ($args ~* format=xml) { rewrite ^/dynamic_request/?(.*)$ /dynamic_request.xml$1 break; }
                    #
                    # Check if local memcached server can answer this request
                    memcached_pass 127.0.0.1:11211;
                    #
                    # Send to app. server if Memcached could not ansewr the request
                    error_page 404 = @dynamic_request;
                }
                #
                location @dynamic_feed_id {
                    # only internal requests can reach this endpoint internal;
                    #
                    # dispatch to our app_server cluster / instance
                    proxy_pass
                }
                #
            }
        }

        当然,条条道路通罗马,我们还可以使用淘宝前工程师共享的和来实现Nginx写入Memcached,具体如何使用暂且不表,可以参看这里,也可以参看这里


阅读(6523) | 评论(1) | 转发(2) |
1

上一篇:Nginx初探之Location

下一篇:Nginx初探之Lua

给主人留下些什么吧!~~

scq2099yt2013-10-27 20:57:45

文明上网,理性发言...