nginx+memcached=http cache

上周末在openparty听了taobao @agentzh的 nginx scripting hack的主题演讲,心情万分激动,就像一个原始人发现了一把电锯似的的感觉,正好赶上项目需要一个http cache,就借机实践了一把。
过程中,代码量少的令人发指。
业务描述:根据para中的三个参数构造一个复合key,进行memcached的存(post)取(get)

这段是 get 逻辑

location /cache/get {
echo_exec /cache/get/$arg_from$arg_to$arg_date;
}

location ~ '^/cache/get/(.*)$'{
internal;
set $memc_key $1;
set $memc_cmd get;
# format definition is at below
access_log logs/getmemc.log memc;
memc_pass my_memc_backend;
#404 处理
error_page 404 = @nodata;
}

location @nodata{
echo "NO_DATA";
}



这段是 set 逻辑

location /cache/set {
#大数据提交,若写缓存文件,可能导致form_input无法读取
client_body_buffer_size 20k;
#读取post para
set_form_input $from;
set_form_input $to;
set_form_input $date;
set_form_input $memc_value content;
# 用lua进行拼接key
set_by_lua $memc_key "return ngx.arg[1]..ngx.arg[2]..ngx.arg[3]" $from $to $date;
# format 'memc' definition is at below
access_log logs/setmemc.log memc;

set $memc_cmd set;
set $memc_exptime 0;

memc_pass my_memc_backend;
}


这段应该放在头部,供下面引用

#format for memc about
log_format memc '$remote_addr [$time_local] $memc_key $body_bytes_sent';


但是简单的前提是“站在巨人的肩膀上”,感谢 @agentzh @chaoslawful 在nginx社区的贡献。以下是用到的他们开发的mod

--add-module=/root/agentzh-echo-nginx-module-22f3f7e\
--add-module=/root/agentzh-memc-nginx-module-1128d82\
--add-module=/root/calio-form-input-nginx-module-8f05d08\
--add-module=/root/chaoslawful-lua-nginx-module-0ef14aa\
--add-module=/root/ngx_http_upstream_keepalive-2ce9d8a1ca93\
--add-module=/root/simpl-it-ngx_devel_kit-8d75c70


后感:
nginx可以学一点,高度的可扩展,大有前途。而且有个重点是里面的中文开发者很活跃,比如上面两位。

[color=blue]补充:client_body_buffer_size 20k; POST数据包太大,超过默认buff(8k)时,会写到临时文件,导致 $request_body 读取有问题。[/color]


相关ppt
http://agentzh.org/misc/slides/nginx-conf-scripting/
http://agentzh.org/misc/slides/recent-dev-nginx-conf/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值