iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Openresty中如何实现模块开发以及连接Redis
  • 557
分享到

Openresty中如何实现模块开发以及连接Redis

2023-06-19 12:06:06 557人浏览 八月长安
摘要

这篇文章给大家分享的是有关Openresty中如何实现模块开发以及连接Redis的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。lua模块开发在实际的开发过程中,不可能把所有的lua代码写在一个lua文件中,通常的

这篇文章给大家分享的是有关Openresty中如何实现模块开发以及连接Redis的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

lua模块开发

在实际的开发过程中,不可能把所有的lua代码写在一个lua文件中,通常的做法将特定功能的放在一个lua文件中,即用lua模块开发。在lualib目录下,默认有以下的lua模块。

lualib/├── cJSON.so├── ngx│   ├── balancer.lua│   ├── ocsp.lua│   ├── re.lua│   ├── semaphore.lua│   ├── ssl│   │   └── session.lua│   └── ssl.lua├── rds│   └── parser.so├── Redis│   └── parser.so└── resty    ├── aes.lua    ├── core    │   ├── base64.lua    │   ├── base.lua    │   ├── ctx.lua    │   ├── exit.lua    │   ├── hash.lua    │   ├── misc.lua    │   ├── regex.lua    │   ├── request.lua    │   ├── response.lua    │   ├── shdict.lua    │   ├── time.lua    │   ├── uri.lua    │   ├── var.lua    │   └── worker.lua    ├── core.lua    ├── dns    │   └── resolver.lua    ├── limit    │   ├── conn.lua    │   ├── req.lua    │   └── traffic.lua    ├── lock.lua    ├── lrucache    │   └── pureffi.lua    ├── lrucache.lua    ├── md5.lua    ├── memcached.lua    ├── mysql.lua    ├── random.lua    ├── redis.lua    ├── sha1.lua    ├── sha224.lua    ├── sha256.lua    ├── sha384.lua    ├── sha512.lua    ├── sha.lua    ├── string.lua    ├── upload.lua    ├── upstream    │   └── healthcheck.lua    └── websocket        ├── client.lua        ├── protocol.lua        └── server.lua

在使用这些模块之前,需要在Nginx的配置文件nginx.conf中的Http模块加上以下的配置:

 lua_package_path "/usr/example/lualib/?.lua;;";  #lua 模块   lua_package_cpath "/usr/example/lualib/?.so;;";  #c模块

现在来简单的开发一个lua模块:

vim /usr/example/lualib/module1.lua

在module1.lua文件加上以下的代码:

local count = 0  local function hello()     count = count + 1     ngx.say("count : ", count)  end  local _M = {     hello = hello  }  return _M

开发时将所有数据做成局部变量/局部函数;通过 _M导出要暴露的函数,实现模块化封装。

在/usr/example/lua目录下创建一个test_module_1.lua 文件,在该文件中引用上面的module1.lua文件。

vim /usr/example/lua/test_module_1.lua

加上以下代码:

local module1 = require("module1")  module1.hello()

通过require(“模块名”)来加载模块,如果是多级目录,则需要通过require(“目录1.目录2.模块名”)加载。

在/user/example/example.conf中加上以下的配置:

location /lua_module_1 {      default_type 'text/html';      lua_code_cache on;      content_by_lua_file /usr/example/lua/test_module_1.lua;  }

多次在浏览器上访问:http://116.196.177.123/lua_module_1,浏览器显示:

count : 1count : 2count : 3...

安装redis

linux下安装:
cd /usr/servers

$ wget http://download.redis.io/releases/redis-3.2.6.tar.gz$ tar xzf redis-3.2.6.tar.gz$ cd redis-3.2.6$ make

启动redis:

nohup /usr/servers/redis-3.2.6/src/redis-server  /usr/servers/redis-3.2.6/redis.conf &

查看是否启动:

ps -ef |grep redis

终端显示:

root     20985 14268  0 18:49 pts/0    00:00:00 /usr/servers/redis-3.2.6/src/redis-server 127.0.0.1:6379

可见redis已经启动。

lua连接redis

lua_resty_redis模块地址:https://GitHub.com/openresty/lua-resty-redis

lua-resty-redis - Lua redis client driver for the ngx_lua based on the coSocket api

lua_resty_redis 它是一个基于cosocket API的为ngx_lua模块提供Lua redis客户端的驱动。

创建一个test_redis_basic.lua文件

vim /usr/example/lua/test_redis_basic.lua

 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.say("set keepalive error : ", err)      end  end    local redis = require("resty.redis")  local red = redis:new()  red:set_timeout(1000)  local ip = "127.0.0.1"  local port = 6379  local ok, err = red:connect(ip, port)  if not ok then      ngx.say("connect to redis error : ", err)      return close_redis(red)  end  ok, err = red:set("msg", "hello world")  if not ok then      ngx.say("set msg error : ", err)      return close_redis(red)  end  local resp, err = red:get("msg")  if not resp then      ngx.say("get msg error : ", err)      return close_redis(red)  end  if resp == ngx.null then      resp = ''  end  ngx.say("msg : ", resp)  close_redis(red)

上面的代码很简单,通过连接池连接Redis,连接上redis后,通过set一对键值对(msg,helloWord)到redis中,然后get(msg),并通过ngx.say()返回给浏览器。

vim /usr/example/example.conf,添加以下的配置代码:

location /lua_redis_basic {      default_type 'text/html';      lua_code_cache on;      content_by_lua_file /usr/example/lua/test_redis_basic.lua;   }

浏览器访问:http://116.196.177.123/lua_redis_basic

浏览器显示:

msg : hello world

lua_resty_redis支持所有的redis指令,本身Redis就支持lua语言操作。所以lua_resty_redis模块能够提高所有的redis操作的功能。

在很多时候,Redis是设置了口令的,连接时,如果需要验证口令,需要添加 local res, err = red:auth(“foobared”),示例代码如下:

  local redis = require "resty.redis"    local red = redis:new()    red:set_timeout(1000) -- 1 sec    local ok, err = red:connect("127.0.0.1", 6379)    if not ok then        ngx.say("failed to connect: ", err)        return    end    local res, err = red:auth("foobared")    if not res then        ngx.say("failed to authenticate: ", err)        return    end

感谢各位的阅读!关于“Openresty中如何实现模块开发以及连接Redis”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Openresty中如何实现模块开发以及连接Redis

本文链接: https://www.lsjlt.com/news/296035.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Openresty中如何实现模块开发以及连接Redis
    这篇文章给大家分享的是有关Openresty中如何实现模块开发以及连接Redis的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Lua模块开发在实际的开发过程中,不可能把所有的lua代码写在一个lua文件中,通常的...
    99+
    2023-06-19
  • 关于什么是javascript模块化以及为何使用模块化开发
    模块化是一种软件开发的设计模式,它将一个大型的软件系统划分成多个独立的模块,每个模块都有自己的功能和接口,并且能够与其他模块独立地工作。  先来一段八股文 模块化开发可以带...
    99+
    2023-05-15
    javascript javascript模块化
  • Spring如何连接数据库以及JDBC模板
    这篇文章将为大家详细讲解有关Spring如何连接数据库以及JDBC模板,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、创建工程、导包要想使用Spring的jdbc模板前,还需要导入相关的jar包:二、进...
    99+
    2023-05-31
    spring 数据库 jdbc
  • php如何实现Redis连接与认证
    这篇文章给大家分享的是有关php如何实现Redis连接与认证的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Redis连接与认证//连接参数:ip、端口、连接超时时间,连接成功返回...
    99+
    2024-04-02
  • css中如何实现模块化
    css中如何实现模块化?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。oocss面对对象的规则,主要的原则是两种:分离结构和外观,分离容器和内容。名词解释分离结构和外观:增加...
    99+
    2023-06-08
  • 怎么在python中利用第三方模块实现连接
    怎么在python中利用第三方模块实现连接?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、...
    99+
    2023-06-14
  • esp8266模块--MQTT协议连接服务器实现数据接收和发送+源码
    首先推荐中国移动的代码,我觉得中国移动的代码更为合理:(但是有一些其他的模块在里面) OneNET开发板代码、资料--2020-09-27--标准板、Mini板bug修复 - 开发板专区 - OneNET设备云论坛 (10086.cn) 以...
    99+
    2023-09-20
    笔记 嵌入式硬件 stm32
  • iOS 11开发中如何实现iOS11数据线连接真机测试
    这篇文章主要为大家展示了“iOS 11开发中如何实现iOS11数据线连接真机测试”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS 11开发中如何实现iOS11数据线连接真机测试”这篇文章吧。...
    99+
    2023-06-04
  • MySQL中如何实现左连接与右连接
    这篇文章给大家介绍MySQL中如何实现左连接与右连接,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。表A记录如下: aID     &n...
    99+
    2024-04-02
  • 什么是ASP.NET中的NPM模块,以及如何使用它们?
    ASP.NET是一个广泛使用的Web应用程序框架,它提供了一种基于服务器端的开发方式,使得Web应用程序能够更加高效、灵活地运行。NPM模块则是在ASP.NET中非常常用的一种工具,它能够帮助开发人员更加轻松地管理和使用各种前端资源。本文将...
    99+
    2023-08-25
    npm 数组 api
  • Redis中的哨兵模式如何实现
    这篇文章主要介绍Redis中的哨兵模式如何实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Redis Sentinel哨兵模式 是一个分布式系统, 你可以在一个架构中运行多个 Se...
    99+
    2024-04-02
  • 使用springboot如何实现配置多个redis连接
    这篇文章将为大家详细讲解有关使用springboot如何实现配置多个redis连接,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、springboot nosql 简介Spring Dat...
    99+
    2023-05-31
    springboot redis
  • Go语言Websocket开发实践:如何处理连接中断
    Go语言Websocket开发实践:如何处理连接中断引言:Websocket是一种在Web浏览器和服务器之间进行双向通信的协议,通过这种协议可以实现实时交互和数据传输。在Go语言中,可以方便地使用标准库中提供的github.com/gori...
    99+
    2023-12-14
    Go websocket 连接中断处理
  • web开发中如何实现单态设计模式
    这篇文章主要为大家展示了“web开发中如何实现单态设计模式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web开发中如何实现单态设计模式”这篇文章吧。 ...
    99+
    2024-04-02
  • Python如何实现以主程序的形式执行模块
    今天小编给大家分享一下Python如何实现以主程序的形式执行模块的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言:这个先来...
    99+
    2023-07-02
  • Redis中出现大量连接超时如何解决
    今天就跟大家聊聊有关Redis中出现大量连接超时如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。排查思路查看异常分布首先根据经验,我们看看自己...
    99+
    2024-04-02
  • Python中如何使用re模块实现okenizer
    这篇文章主要介绍“Python中如何使用re模块实现okenizer”,在日常操作中,相信很多人在Python中如何使用re模块实现okenizer问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中...
    99+
    2023-06-30
  • 使用SpringBoot如何实现远程连接redis服务器
    今天就跟大家聊聊有关使用SpringBoot如何实现远程连接redis服务器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用了SpringBoot的项目,在远程连接Redis服务器...
    99+
    2023-05-31
    springboot 远程连接 redis
  • 在Java项目中使用Jedis如何实现连接并操作Redis
    在Java项目中使用Jedis如何实现连接并操作Redis?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一.   redis的安装下载源码,解压缩后编译源码...
    99+
    2023-05-31
    jedis redis java
  • mysql中如何实现外连接转换为内连接
    小编给大家分享一下mysql中如何实现外连接转换为内连接,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作