nginx redisモジュール使用

4888 ワード

nginx redis    

1. httpredis  
# nginx.conf
user  root root;
worker_processes  2;
worker_rlimit_nofile 51200;
error_log  logs/error.log;
pid        logs/nginx.pid;

events {
        use epoll;
        worker_connections  50000;
}


http {
        access_log logs/access.log;
        server {
                listen 80 default;
                server_name 127.0.0.1;
                root html;
                index index.html index.htm;
                location / {
                        default_type text/html;
                        set $redis_key $uri;
                        redis_pass 127.0.0.1:6379;
                        error_page 404 = @fetch;
                        }
                location @fetch {
                        root html;
                        }
                }
}

# curl 127.0.0.1/a.js
// this is a js file
# curl 127.0.0.1
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>ngx_openresty/1.4.3.3</center>
</body>
</html>

# redis-cli
redis 127.0.0.1:6379> set '/a.js' '// fetch from redis'
# curl 127.0.0.1/a.js 
// fetch from redis

2. HttpRedis2Module  
# nginx.conf
user  root root;
worker_processes  2;
worker_rlimit_nofile 51200;
error_log  logs/error.log;
pid        logs/nginx.pid;

events {
        use epoll;
        worker_connections  50000;
}


http {
        access_log logs/access.log;
        server {
                listen 80 default;
                server_name 127.0.0.1;
                root html;
                index index.html index.htm;
                location /get {
                        set_unescape_uri $key $arg_key;
                        redis2_query get $key;
                        redis2_pass 127.0.01:6379;
                        }
                location /set {
                        set_unescape_uri $key $arg_key;
                        set_unescape_uri $val $arg_val;
                        redis2_query set $key $val;
                        redis2_pass 127.0.01:6379;
                        }
                }
}

[root@VM_44_150_centos test]# curl -i 'localhost/set?key=/a.js&val=caoqing'
HTTP/1.1 200 OK
Server: ngx_openresty/1.4.3.3
Date: Thu, 14 Nov 2013 06:37:44 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive

+OK
[root@VM_44_150_centos test]# curl -i localhost/get?key=/a.js
HTTP/1.1 200 OK
Server: ngx_openresty/1.4.3.3
Date: Thu, 14 Nov 2013 06:37:45 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive

$7
caoqing

3. HttpLuaModule   lua-resty-redis  
# nginx.conf
user  root root;
worker_processes  2;
worker_rlimit_nofile 51200;
error_log  logs/error.log;
pid        logs/nginx.pid;

events {
        use epoll;
        worker_connections  50000;
}


http {
        access_log logs/access.log;
        server {
                listen 80 default;
                server_name 127.0.0.1;
                root html;
                index index.html index.htm;
                location / {
                        content_by_lua_file '/root/conf/redis.lua';
                        }
                }
}
-- redis.lua
local cmd = tostring(ngx.var.arg_cmd)
local key = tostring(ngx.var.arg_key)
local val = tostring(ngx.var.arg_val)
local commands = {
        get="get",
        set="set"
}
cmd = commands[cmd]
if not cmd then
        ngx.say("command not found!")
        ngx.exit(400)
end

local redis = require("resty.redis")
local red = redis:new()

red:set_timeout(1000) -- 1 second

local ok,err = red:connect("127.0.0.1",6379)
if not ok then
        ngx.say("failed to connect: ",err)
        return
end

if cmd == "get" then
        if not key then ngx.exit(400) end
        local res,err = red:get(key)
        if not res then
                ngx.say("failed to get ",key,": ",err)
                return
        end
        ngx.say(res)
end

if cmd == "set" then
        if not (key and val) then ngx.exit(400) end
        local ok,err = red:set(key,val)
        if not ok then
                ngx.say("failed to set ",key,": ",err)
                return
        end
        ngx.say(ok)
end

[root@VM_44_150_centos test]# curl -i 'localhost/?cmd=set&key=my&val=caoqing'
HTTP/1.1 200 OK
Server: ngx_openresty/1.4.3.3
Date: Thu, 14 Nov 2013 06:43:54 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive

OK
[root@VM_44_150_centos test]# curl -i 'localhost/?cmd=get&key=my'
HTTP/1.1 200 OK
Server: ngx_openresty/1.4.3.3
Date: Thu, 14 Nov 2013 06:44:07 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive

caoqing