nginx+memcache缓存服务

14 篇文章 0 订阅

目标:利用memcache实现Nginx对页面/资源的缓存,提高响应速度。

前提:

1、Nginx+lua模块。搭建Nginx+Lua环境参见nginx+lua+redis构建高并发应用(ubuntu) 和nginx+lua+redis构建高并发应用(centos/rehat)

2、memcache服务已启动。搭建linux下的memcache服务参见在Linux上安装Memcached服务

Nginx.conf配置如下:


...


#for memcache start
        location ~ \.(js|css|gif|png|swf|exe|ico|xml|jpg)$ {
set $memc_key $request_uri;
add_header X-mem-key  $memcached_key;
memcached_pass  memcacheds;
error_page 500 404 502 504 = @app_sources;
}


location @app_sources {
content_by_lua_file ./conf/mem_req.lua;
}


location /Search {
set $memcached_key $request_uri;
add_header X-mem-key  $memcached_key;
memcached_pass  memcacheds;
default_type text/html;
error_page 404 502 504 = @app;
}


location @app {
default_type text/html;
                content_by_lua_file ./conf/mem_req.lua;
}


location /set_memc {
                rewrite_by_lua ' 
ngx.req.read_body();
ngx.var.memc_value = ngx.req.get_body_data();
';
set $memc_cmd "set";
set $memc_key $arg_key;
set $memc_flags "0";
set $memc_exptime "60";


memc_pass memcacheds;
}




location /memc_internal {
                set_by_lua $user_req ' return "http://192.168.235.236:3000" ..  ngx.var.arg_key ';
                proxy_pass $user_req;
        }


#for memcache end

...


解释:

set_memc :将请求的URL和后端服务返回的有效结果组成key-value存入memcache服务。

memc_internal :向后端服务发送请求URL。


mem_req.lua如下:

--ngx.say("request_uri is : ", ngx.var.request_uri)
local cap_uri = "/memc_internal?key=" .. ngx.var.request_uri
local node_res = ngx.location.capture(cap_uri)


if node_res.status == 200 then
ngx.say(node_res.body)
        local res =  ngx.location.capture(
'/set_memc?key='..ngx.var.request_uri,
{method = ngx.HTTP_POST, body = node_res.body}
)
--ngx.say("set_memc res is : ", res.status, res.body)
else
ngx.say("1111111111111", node_res.status, node_res.body);
end


解释:

当nginx在memcache服务中没有查询到缓存时,执行mem_req.lua。其中,执行转发后端请求,并将有效结果通过调用set_memc分支进行缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值