这两天在弄一个简单的缓存方案来用,通过网上搜索学习,最后定格为srcache + redis。最初想用lua-resty-redis,这个直接可以用lua操作redis来添加、获取内容,十分的灵活,但苦于lua不熟悉,redis也不够熟悉,最后试了一下,放弃了。最后选择使用srcache-nginx-module中例子的方案:ngx_http_redis-0.3.7, redis2-nginx-module,
方案很简单,直接拿来就可以用了
-
location /api {
-
default_type text/css;
-
-
set $key $uri;
-
set_escape_uri $escaped_key $key;
-
-
srcache_fetch GET /redis $key;
-
srcache_store PUT /redis2 key=$escaped_key&exptime=120;
-
-
# fastcgi_pass/proxy_pass/drizzle_pass/postgres_pass/echo/etc
-
}
-
-
location = /redis {
-
internal;
-
-
set $redis_key $args;
-
redis_pass 127.0.0.1:6379;
-
}
-
-
location = /redis2 {
-
internal;
-
-
set_unescape_uri $exptime $arg_exptime;
-
set_unescape_uri $key $arg_key;
-
-
redis2_query set $key $echo_request_body;
-
redis2_query expire $key $exptime;
-
redis2_pass 127.0.0.1:6379;
-
}
但是问题来了,我有很多post带参数的,这样同一个uri下就只能有一个key,解决key的计算就成了棘手的问题。使用set_by_lua来计算key吧,无法获取post的在参数,用了几个其他比如rewrite_by_lua等可以获取post中参数的directive还是不行,key还未计算已经传到srcache_fetch中去了。最后想到了一个方法,就是先用content_by_lua计算key之后,把key当作uri的parameter,
再在content_by_lua中redirect到另一个cache 的这个location中去,那样就有计算好的key值了。嘿嘿。。
阅读(1912) | 评论(0) | 转发(0) |