# sudo vi /usr/local/openresty/nginx/conf/nginx.conf location /showRedis{ default_type'text/html'; content_by_lua_block{ -- 引入Redis接口模块 local redis = require "resty.redis" -- 创建Redis对象 local redisObj = redis:new() -- 设置超时时间 redisObj:set_timeout(1000) local ok,err = redisObj:connect("192.168.253.135",6379) if not ok then ngx.say('failed to connection with redis',err) return else ngx.say('connect to Redis success','<br>') end -- 向Redis存入数据 local ok,err = redisObj:set('username','ni9ne') if ok then ngx.say('set value username_ni9ne:', ok,'<br>') else ngx.say('failed to set value',err) return end -- 从Redis中获取数据 local res,err = redisObj:get('username') ngx.say('<h1>',res,'<h1>') -- 关闭Redis连接 redisObj:close() } }
# sudo vi /usr/local/openresty/nginx/conf/nginx.conf location /mysqlQuery{ default_type'text/html'; content_by_lua_block{ -- 引入resty.msyql模块 local mysql = require 'resty.mysql' -- 创建连接对象 local db = mysql:new() -- 建立连接 local ok,err = db:connect{ host="192.168.253.134", port=3306, user="root", password="xxxxxx", database="nginx_db" } -- 验证是否连接成功 if not ok then ngx.say('failed connected to mysql',err) return else ngx.say('mysql connected success'..'<br/>') end -- 设置超时时间 db:set_timeout(1000) -- 发送SQL语句 db:send_query('select * from users where id=2') -- 接收返回结果 local res,err,errcode,sqlstate = db:read_result() -- 输出信息到页面 if not err then ngx.say('res[1].username:',res[1].username) ngx.say('<br/>') end ngx.say('err:',err) ngx.say('<br/>') ngx.say('errcode:',errcode) ngx.say('<br/>') ngx.say('sqlstate:',sqlstate) -- 关闭连接 db:close() } }
# sudo vi /usr/local/openresty/nginx/conf/nginx.conf location /mysqlQuery{ default_type'text/html'; content_by_lua_block{ local mysql = require 'resty.mysql' local db = mysql:new() local ok,err = db:connect{ host="192.168.253.134", port=3306, user="root", password="xxxxxx", database="nginx_db" } if not ok then ngx.say('failed connected to mysql',err) return else ngx.say('mysql connected success'..'<br/>') end db:set_timeout(1000) db:send_query('select * from users') local res,err,errcode,sqlstate = db:read_result() if not err then --[[ ngx.say('res[1].username:',res[1].username) ngx.say('<br/>') --]] # for循环解析多条数据 for i,v in pairs(res) do ngx.say('username:'..v.username,'|','salary:'..v.salary) ngx.say('<br/>') end end ngx.say('err:',err) ngx.say('<br/>') ngx.say('errcode:',errcode) ngx.say('<br/>') ngx.say('sqlstate:',sqlstate) db:close() } }
# sudo vi /usr/local/openresty/nginx/conf/nginx.conf location /mysqlQuery{ default_type'text/html'; content_by_lua_block{ local mysql = require 'resty.mysql' # 引入cjson模块, 也可以在http块中初始化 # init_by_lua_block{ cjson=require 'cjson' } local cjson = require 'cjson' local db = mysql:new() local ok,err = db:connect{ host="192.168.253.134", port=3306, user="root", password="xxxxxx", database="nginx_db" } if not ok then ngx.say('failed connected to mysql',err) return else ngx.say('mysql connected success'..'<br/>') end db:set_timeout(1000) db:send_query('select * from users') local res,err,errcode,sqlstate = db:read_result() if not err then --[[ for i,v in pairs(res) do ngx.say('username:'..v.username,'|','salary:'..v.salary) ngx.say('<br/>') end --]] local res_json = cjson.encode(res) ngx.say('res_json: ',res_json) ngx.say('<br/>') end ngx.say('err:',err) ngx.say('<br/>') ngx.say('errcode:',errcode) ngx.say('<br/>') ngx.say('sqlstate:',sqlstate) db:close() } }
# sudo vi /usr/local/openresty/nginx/conf/nginx.conf location /mysqlQuery{ default_type'text/html'; content_by_lua_block{ local mysql = require 'resty.mysql' local cjson = require 'cjson' local db = mysql:new() local ok,err = db:connect{ host="192.168.253.134", port=3306, user="root", password="xxxxxx", database="nginx_db" } if not ok then ngx.say('failed connected to mysql',err) return else ngx.say('mysql connected success'..'<br/>') end db:set_timeout(1000) local sql = 'select * from users' # 使用query() local res,err,errcode,sqlstate = db:query(sql) if res then local res_json = cjson.encode(res) ngx.say('res_json: ',res_json) ngx.say('<br/>') end ngx.say('err:',err) ngx.say('<br/>') ngx.say('errcode:',errcode) ngx.say('<br/>') ngx.say('sqlstate:',sqlstate) db:close() } }
# sudo vi /usr/local/openresty/nginx/conf/nginx.conf location /mysqlQuery{ default_type'text/html'; content_by_lua_block{ local mysql = require 'resty.mysql' local cjson = require 'cjson' local db = mysql:new() local ok,err = db:connect{ host="192.168.253.134", port=3306, user="root", password="xxxxxx", database="nginx_db" } if not ok then ngx.say('failed connected to mysql',err) return else ngx.say('mysql connected success'..'<br/>') end db:set_timeout(1000) -- local sql = "insert into users (username,birthday,salary) values ('aris','1998-12-07',22356)" -- local sql = "update users set salary=100 where id=1" local sql = "delete from users where username = 'aris'" # 使用query() local res,err,errcode,sqlstate = db:query(sql) if res then local res_json = cjson.encode(res) ngx.say('res_json: ',res_json) ngx.say('<br/>') end ngx.say('err:',err) ngx.say('<br/>') ngx.say('errcode:',errcode) ngx.say('<br/>') ngx.say('sqlstate:',sqlstate) db:close() } }
验证结果
1 2
-- 新增 insert into users (username,birthday,salary) values ('aris','1998-12-07',22356)
-- 创建业务逻辑脚本 -- sudo vim /usr/local/openresty/nginx/lua_script/lua_cache_warm_script.lua -- 获取get参数username local param = ngx.req.get_uri_args()['username'];
-- 连接数据库 local db = mysql:new() local ok,err = db:connect{ host="192.168.253.134", port=3306, user="root", password="xxxxxx", database="nginx_db" } ifnot ok then ngx.say("failed connect to mysql: ",err) return end db:set_timeout(1000)
-- 依据get参数构建SQL local sql = "" if param then sql = "select * from users where username = ".."'"..param.."'" else sql = "select * from users" end
--执行SQL,获取数据 local res,err,errcode,sqlstate = db:query(sql) ifnot res then ngx.say("failed query in mysql: ",err) return end
-- 连接Redis local redisObj = redis:new() local ok,err = redisObj:connect("192.168.253.135",6379) ifnot ok then ngx.say("failed connect to redis: ",err) return end redisObj:set_timeout(1000)
-- 循环MySQL数据存入Redis local count=0 for i,v inipairs(res) do local redis_key = "user_"..v.username local res_json = cjson.encode(v) local ok,err = redisObj:set(redis_key,res_json) ifnot ok then ngx.say("failed set redis value: "..redis_key..'-'..res_json,err) else ngx.say("success set redis value: "..redis_key..'-'..res_json) end ngx.say("<br/>") count = count + 1 end ngx.say("warm cache success, total count "..count)