1 案例
1.1 get_value.lua
描述: 从redis中获取value
local redis = require "redis_conf"
local red = redis:new()
function get_from_redis(key)
local res,err=red:get(key)
if res then
return res
else
return err
end
end
local value=get_from_redis('value')
ngx.say("value: ", value)
1.2 nginx.conf
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
lua_package_path "/usr/local/openresty/nginx/lua/conf/?.lua;;";
server {
listen 80;
server_name localhost;
lua_code_cache on;
location / {
root html;
index index.html index.htm;
}
location /get_value {
default_type 'text/html';
content_by_lua_file lua/get_value.lua;
}
}
}
1.3 ab测试
#重启
/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf -s reload
#测试10W并发 100客户端
ab -n 100000 -c 100 -k http://192.168.38.38/get_value
2 加入lua_shared_dict
2.1 nginx.conf
lua_shared_dict cache_ngx 128m;
2.2 get_value.lua
local redis = require "redis_conf"
local red = redis:new()
-- 从redis中获取
function get_from_redis(key)
local res, err = red:get(key)
if res then
return res
else
return err
end
end
-- 设置nginx 缓存数据
function set_to_cache(key, value, expire)
if not expire then
expire = 0
end
local cache_ngx = ngx.shared.cache_ngx
local succ, err, forcible = cache_ngx:set(key, value, expire)
return succ
end
-- 从nginx缓存中获取
function get_from_cache(key)
local cache_ngx = ngx.shared.cache_ngx
local value = cache_ngx:get(key)
if not value then
value = get_from_redis(key)
set_to_cache(key, value)
end
return value
end
local value = get_from_cache('value')
ngx.say("value: ", value)
2.3 ab 测试
#重启
ab -n 100000 -c 100 -k http://192.168.38.38/get_value