lua操作mysql:
location /testMysql{
default_type "text/html";
content_by_lua_block{
local cjson = require "cjson"
local mysql = require "resty.mysql"
local db = mysql:new()
local ok,err = db:connect{
host="192.168.25.111",
port=3306,
user="root",
password="123456",
database="changgou"
}
db:set_timeout(1000)
--db:send_query("select * from users where id =1")
-- db:send_query("select * from users")
--local res,err,errcode,sqlstate = db:query("select * from users")
--local res,err,errcode,sqlstate = db:query("insert into users(id,username,birthday,salary) values(null,'zhangsan','2020-11-11',32222.0)")
--local res,err,errcode,sqlstate = db:query("update users set username='lisi' where id = 6")
local uri_args = ngx.req.get_uri_args()
name = uri_args['name']
--insertsql = "insert into openrestrytest(name) values("..name..")"
--selectsql = "select * from openrestrytest where id='2'"
updatesql = "update openrestrytest set name='dk' where id='4'"
local res,err,errcode,sqlstate = db:query(updatesql)
--local res,err,errcode,sqlstate = db:query("select * from tb_user where username='zhangsan'")
ngx.say(cjson.encode(res))
db:close()
--local res,err,errcode,sqlstate = db:read_result()
--ngx.say(res[1].id..","..res[1].username..","..res[1].birthday..","..res[1].salary)
}
}
lua操作单机redis
location /testRedis{
default_type 'text/html';
content_by_lua_block{
local redis = require "resty.redis"
local redisObj = redis:new()
redisObj:set_timeout(1000)
local ok,err = redisObj:connect("192.168.25.111",6379)
if not ok then
ngx.say("failed to connection redis",err)
return
end
local uri_args = ngx.req.get_uri_args()
name = uri_args['name']
ok,err = redisObj:set("openrestry:"..name,name)
if not ok then
ngx.say("failed to set username",err)
return
end
local res,err = redisObj:get(name)
ngx.say(res)
redisObj:close()
}
}
操作redis集群:
location /rc {
default_type text/html;
content_by_lua_file lua/redis-cluster.lua;
}
local config = {
name = "test",
serv_list = {
{ip="192.168.25.113", port = 6001},
{ip="192.168.25.113", port = 6002},
{ip="192.168.25.113", port = 6003},
{ip="192.168.25.113", port = 6004},
{ip="192.168.25.113", port = 6005},
{ip="192.168.25.113", port = 6006},
},
idle_timeout = 1000,
pool_size = 10000,
}
--引入redis集群配置
local redis_cluster = require "resty.rediscluster"
local lredis = {}
--根据key查询
function get(key)
--创建链接
local red = redis_cluster:new(config)
red:init_pipeline()
--根据key获取数据
red:get(key)
local rresult = red:commit_pipeline()
--关闭链接
red:close()
return rresult
end
--添加带过期的数据
function setexp(key,value,time)
--创建链接
local red = redis_cluster:new(config)
red:init_pipeline()
--添加key,同时设置过期时间
red:set(key,value)
red:expire(key,time)
local rresult = red:commit_pipeline()
end
--根据key查询hash
function hget(key1,key2)
--创建链接
local red = redis_cluster:new(config)
red:init_pipeline()
--根据key获取数据
red:hmget(key1,key2)
local rresult = red:commit_pipeline()
--关闭链接
red:close()
return rresult[1]
end
--hash数据添加
function hset(key1,key2,value)
--创建链接
local red = redis_cluster:new(config)
red:init_pipeline()
--添加hash数据
red:hmset(key1,key2,value)
local rresult = red:commit_pipeline()
--关闭链接
red:close()
return rresult
end
--hash中指定的key自增
function hincrby(key1,key2,value)
--创建链接
local red = redis_cluster:new(config)
red:init_pipeline()
--添加hash数据
red:hincrby(key1,key2,value)
local rresult = red:commit_pipeline()
--关闭链接
red:close()
return rresult
end
--hset("SKU_S1235433012716498944","num",111)
--return lredis
setexp("sex","nan",60)
local aa =get("sex")[1]
ngx.say("aa"..aa)
nginx+lua:实现三级缓存
local cjson = require("cjson") local redis = require "resty.redis" --调用new方法,获取 redis对象 local red = redis:new() --先从本地缓存获取,如果没有的话则从redis获取,如果没有直接调用后台服务查询数据库 function get_from_cache(key) --ngx.log(ngx.ERR,"请求的phone:"..key) local cache_ngx = ngx.shared.ngx_cache --先从本地缓存获取 local value = cache_ngx:get(key) if not value then --ngx.log(ngx.ERR,"本地缓存为空...") local rev,err = get_to_redis("personinifo:"..key) if rev == ngx.null then --ngx.log(ngx.ERR,"redis缓存为空...") --调用应用查询数据库 local res =ngx.location.capture("/hm/qh/getCustInfo",{ method = ngx.HTTP_POST,args = obj}) personinfo = res.body set_to_redis("pers:"..key,personinfo) return personinfo else -- 添加缓存到内存字典 --ngx.log(ngx.ERR,"redis缓存不为空直接还回...") set_to_cache(key,rev,60) return rev end else --ngx.log(ngx.ERR,"本地缓存不为空直接还回...") return value end end -- 向 redis 添加缓存数据 function set_to_redis(key,value) -- 设置 redis 超时时间 red:set_timeout(10000) -- 连接 redis 服务器 local ok,err = red:connect("192.168.25.111",6379) local ok,err = red:set(key,value) red:expire("personinifo:"..key,2*60) end -- 从 redis 获取缓存数据 function get_to_redis(key) -- 设置 redis 超时时间 red:set_timeout(10000) -- 连接 redis 服务器 local ok,err = red:connect("192.168.25.111",6379) -- 从 redis 获取缓存数据 local res,err = red:get(key) return res end function set_to_cache(key,value,exptime) if not exptime then exptime = 0 end local cache_ngx = ngx.shared.ngx_cache local succ,err,forrcible = cache_ngx:set(key,value,exptime) return succ end ngx.req.read_body() local jsonBody = ngx.req.get_body_data() local obj = cjson.decode(jsonBody) local phone = obj.data.phone local person_info = get_from_cache("phone_"..phone) ngx.say(person_info)