From cd785fef9329e995670219a8666e7b4f6219e1bf Mon Sep 17 00:00:00 2001 From: iProbe Date: Fri, 26 Jan 2024 16:32:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Others/=E6=A0=B9=E6=8D=AEg?= =?UTF-8?q?pu=E4=BD=BF=E7=94=A8=E7=8E=87=E8=B0=83=E5=BA=A6/=E8=8E=B7?= =?UTF-8?q?=E5=8F=96redis=E4=B8=AD=E9=93=BE=E6=8E=A5=E7=9A=84lua=E8=84=9A?= =?UTF-8?q?=E6=9C=AC.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../获取redis中链接的lua脚本.md | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) diff --git a/Others/根据gpu使用率调度/获取redis中链接的lua脚本.md b/Others/根据gpu使用率调度/获取redis中链接的lua脚本.md index 1529053..76c9095 100644 --- a/Others/根据gpu使用率调度/获取redis中链接的lua脚本.md +++ b/Others/根据gpu使用率调度/获取redis中链接的lua脚本.md @@ -1,2 +1,170 @@ ```lua +--[[ + Created by: wangsuipeng + Edit: 20240125 + Last Modify: 20240126 + version: 1.1 + Description: + 脚本主要用于实现获取redis中的链接。 +--]] + +-- 参数配置 +local redis_host = "60.204.148.84" +local redis_port = 6379 +local redis_pwd = "xm!redis123" +local redis_db = 15 + +local redis_zset = "danceai" +local server_err_msg = "redis server error" + +local redis = require("resty.redis") +-- 关闭redis连接 +local function close_redis(red) + if (not red) then + return + end + --释放连接(连接池实现) + local pool_max_idle_time = 10000 --毫秒 + local pool_size = 100 --连接池大小 + local ok, err = red:set_keepalive(pool_max_idle_time, pool_size) + if (not ok) then + ngx.log(ngx.ERR, "set redis keepalive error : ", err) + return ngx.say(server_err_msg) + --ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) -- 500 + end + ngx.log(ngx.INFO,"close redis success") + +end + +-- 创建连接实例 +local r = redis:new() +-- 超时时间 +r:set_timeout(1000) +-- 连接redis +local ok, err = r:connect(redis_host, redis_port) +-- 判断是否连接成功 +-- 若不成功,使用行配置的upstream +if (not ok) then + ngx.log(ngx.ERR, "connect redis error : ", err) + close_redis(r) + ngx.var.backend = "danceaiStream" + return + --ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) -- 500 +end + +-- 验证 +local rs,err = r:auth(redis_pwd) +if not rs then + ngx.log(ngx.ERR, "auth redis error : ", err) + ngx.var.backend = "danceaiStream" + return + --ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) -- 500 +end +-- 切换到相应db +r:select(redis_db) +-- 查询zset +local data,err = r:zrange(redis_zset,0,0) +-- 判断是否查询到 +-- 若查询失败或结果为空,则使用自行配置的upstream +-- 否则,使用查询到的链接 +if not data or #data == 0 then + ngx.log(ngx.WARN, "get backend error : ", err) + ngx.var.backend = "danceaiStream" +else + for _,backend in pairs(data) do + ngx.var.backend = backend + end +end +close_redis(r) +[root@ops lb]# vim lb.lua +[root@ops lb]# systemctl restart openresty +[root@ops lb]# cat lb.lua +--[[ + Created by: wangsuipeng + Edit: 20240125 + Last Modify: 20240126 + version: 1.1 + Description: + 脚本主要用于实现获取redis中的链接。 +--]] + +-- 参数配置 +-- 默认upstream +local default_backend = "danceaiStream" + +-- redis +local redis_host = "60.204.148.84" +local redis_port = 6379 +local redis_pwd = "xm!redis123" +local redis_db = 15 + +-- 需要获取的zset名称 +local redis_zset = "danceai" + +-- 连接池最大空闲时间 +-- 单位为ms +local redis_pool_idle_time = 10000 +-- 连接池大小 +local redis_pool_size = 100 +-- redis超时时间 +-- 单位为ms +local redis_timeout =1000 + +local redis = require("resty.redis") +-- 关闭redis连接 +local function close_redis(red) + if not red then + return + end + --释放连接(连接池实现) + local pool_max_idle_time = redis_pool_idle_time + local pool_size = redis_pool_size + local ok, err = red:set_keepalive(pool_max_idle_time, pool_size) + if not ok then + ngx.log(ngx.ERR, "set redis keepalive error : ", err) + return ngx.say("redis server error") + --ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) -- 500 + end + ngx.log(ngx.INFO,"close redis success") +end + +-- 创建连接实例 +local r = redis:new() +-- 超时时间 +r:set_timeout(redis_timeout) +-- 连接redis +local ok, err = r:connect(redis_host, redis_port) +-- 判断是否连接成功 +-- 若不成功,使用行配置的upstream +if not ok then + ngx.log(ngx.ERR, "connect redis error : ", err) + ngx.var.backend = default_backend + return + --ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) -- 500 +end + +-- 验证 +local rs,err = r:auth(redis_pwd) +if not rs then + ngx.log(ngx.ERR, "auth redis error : ", err) + ngx.var.backend = default_backend + return + --ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) -- 500 +end +-- 切换到相应db +r:select(redis_db) +-- 查询zset +local data,err = r:zrange(redis_zset,0,0) +-- 判断是否查询到 +-- 若查询失败或结果为空,则使用自行配置的upstream +-- 否则,使用查询到的链接 +if not data or #data == 0 then + ngx.log(ngx.WARN, "get backend error : ", err) + ngx.var.backend = default_backend +else + for _,backend in pairs(data) do + ngx.var.backend = backend + end +end +close_redis(r) ``` \ No newline at end of file