openresty调用redis模块使用订阅/发布模式

        之前在openresty上面做过一些账号和网络权限控制,账号和网段的数据通过调用http接口获取;但是有两个方面考量需要将数据存入redis中。一是http接口有可能发生故障,不能完全依赖接口获取数据;二是可能有少量的需求要手动设置账号数据,比如临时新增或者移除需要控制的账号。

        openresty官方提供了redis模块,但是如果自己去调用官方提供的api的话,需要将基本的api封装成一个方法,以此来减少冗余的代码。好在已经有开源项目帮我们做了这些,本文主要是参考网友的开源贡献:GitHub - anjia0532/lua-resty-redis-util: openresty/lua-resty-redis 封装工具类

        安装方法:

将redis-util.lua文件放到/xx/lualib/resty/目录下即可

        使用方式:

local redis = require("resty.redis-util")
--创建redis实例方法
local function new_redis(ip, port_num, pwd)
        local red = redis:new({
                            host=ip,
                            port=port_num,
                            db_index=0,
                            password=pwd,
                            timeout=3000, --超时时间
                            keepalive=60000, --连接保持时间
                            pool_size=100  --连接池大小
                        });
        return red
end

-- 创建实例
local red = new_redis("10.1.1.1", 6379, "xxxxxxxx")

local func  = red:subscribe("channel")
if not func then
    return nil
end

--死循环处理监听到的消息
while true do
    local res, err = func()
    --3000ms超时,如果不是超时错误就关闭订阅
    if err and err ~= "timeout" then
         func(false)
    end
    --收到订阅消息后的逻辑处理
    if res then
         red:sadd("channel", ngx.md5(ngx.now()))
    end
end

        常见问题:

2022/12/12 15:55:42 [error] 9#0: *9 lua tcp socket read timed out, 
client: 10.1.1.1, server: abc.def.com.cn,
 request: "GET /testHttp HTTP/1.0", host: "abc.def.com.cn"

根据lua_socket_log_errors的描述来看,应该在 Lua 中处理 socket 错误,
并在http,server,location等范围中配置下面语句来关闭错误日志:

lua_socket_log_errors off;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenResty使用Redis的过程是通过Lua脚本来实现的。首先,需要进行准备工作,确保OpenRestyRedis环境的配置正确。OpenResty主要用于解决高并发问题,而为了避免数据库成为高并发的瓶颈,操作Redis变得不可避免。 如果对OpenResty不太了解,可以参考相关文章进行学习。在Windows系统下,可以使用ZeroBrane Studio进行开发和调试OpenResty代码。 在使用OpenResty操作Redis之前,需要将相关的代码添加到配置文件中。具体的配置数据可以根据自己的Redis数据库情况进行修改。配置文件中包含了连接信息、超时时间以及Redis的库等信息。 在使用OpenResty时,可以根据具体的需求和场景,编写Lua脚本来操作Redis实现数据的读取、写入和删除等操作。通过调用相关的Redis命令,可以实现Redis的交互。 总结来说,OpenResty使用Redis的过程是通过Lua脚本与Redis进行交互,通过配置文件设置Redis的连接信息和相关参数,然后根据需求编写Lua脚本来操作Redis中的数据。这样可以有效地解决高并发问题并提升系统性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [OpenResty高并发最佳实践--Redis操作](https://blog.csdn.net/lupengfei1009/article/details/86160652)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值