架构图
一、准备
1、服务器首先是需要安装redis服务,查看本博客中的另一篇文章 2、安装nginx+luq服务,查看本博客中的另一篇文章
二、下载lua redis库
lua-redis库地址 https://github.com/openresty/lua-resty-redis cd /data/www/lua/vendor git clone https://github.com/openresty/lua-resty-redis.git
三、vim nginx.conf,http中添加
lua_package_path "/data/www/lua/vendor/lua-resty-redis/lib/?.lua;;";
四、nginx server中操作redis
1、在nginx.conf中嵌入lua代码
location /hello { default_type 'text/json'; local redis = require "resty.redis"; local instance = redis:new(); local host = "127.0.0.1"; local port = 6379; local ok,err = instance:connect(host,port); if not ok then ngx.log(ngx.ERR,err); ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE); end local suc, err instance:set('devil', 'hello world') f not suc then ngx.say("error") else ngx.say(instance:get('instance')) end }
2、在实际业务中,独立lua代码(下面是一个redis简单的demo)
location /hello { default_type 'text/json'; lua_need_request_body on; content_by_lua_file /data/www/lua/www/redis.lua; }
2.1、lua文件的代码 vim /data/www/lua/www/redis.lua
#!/usr/local/bin/lua --[[ redis操作demo Devil http://gongfuxiang.com --]] -- 引入redis库 local redis = require "resty.redis"; -- 实例化redis local instance = redis:new(); -- redis配置参数 local host = "127.0.0.1"; local port = 6379; -- 创建redis连接 local ok,err = instance:connect(host,port); if not ok then ngx.log(ngx.ERR,err); ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE); end -- 获取客户端post过来的body数据 local request_body = ngx.req.get_body_data() or nil if( request_body ~= nil ) then -- 客户端ip local client_ip =ngx.req.get_headers()["X-Real-IP"] if client_ip == nil then client_ip = ngx.req.get_headers()["x_forworded_for"] end if client_ip == nil then client_ip = ngx.var.remote_addr end -- 当前时间戳 local time = os.time() -- 拼接redis数据 local data = client_ip.."{-}"..time.."{-}"..request_body -- 队列方式存储redis数据 local suc, err = instance:lpush('key_list', data) if not suc then ngx.say('{"code":-2, "msg":"操作失败"}') end ngx.say('{"code":0, "msg":"操作成功"}') else ngx.say('{"code":-1, "msg":"数据有误"}') end
五、测试,访问 http://localhost/hello
hello world
发表评论: