网站首页 > 精选教程 正文
Nginx结合Lua脚本,直接绕过Tomcat应用服务器,连接MySQL/Redis直接获取数据,再结合Lua中Template组件,直接写入动态数据,渲染成页面,响应前端,一次请求响应过程结束。最终达到下图的一个效果。
OpenResty组件
OpenResty的自带组件库默认已经集成了相当实用的组件,http://openresty.org/cn/components.html,如下所示:
LuaCjsonLibrary
LuaRestyMemcachedLibrary
LuaRestyMySQLLibrary
LuaRestyRedisLibrary
LuaRestyWebSocketLibrary
LuaRestyLimitTrafficLibrary
其它等等
Lua-mysql 连接mysql
Lua直接连接MySQL的代码,再结全上一篇中连接Redis的代码,可以完成从后端动态的索取数据。
--测试连接mysql,获取数据local function close_db(db) if not db then return end db:close()end//引入mysql组件local mysql = require("resty.mysql")local json = require("dkjson")local db, err = mysql:new()if not db then ngx.say("error : ", err) returnenddb:set_timeout(1000)local props = { host = "192.168.1.104", port = 3306, database = "sonar", user = "root", password = "root"}local res, err, errno, sqlstate = db:connect(props)if not res then ngx.say("connect error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db)endlocal select_sql = "select * from dashboards"res, err, errno, sqlstate = db:query(select_sql)if not res then ngx.say("select error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate) return close_db(db)endfor i, row in ipairs(res) do for name, value in pairs(row) do ngx.say("select row =", i, " : ", name, " = ", value, "<br/>") end end close_db(db)
Lua-template 模板技术
通过Lua从后端动态取数,需要将数据渲染到静态页面,此时需要引入Template组件,该组件已经在OpenResty中引入,所以勿须再次安装,直接使用即可。
--测试template组件,填充一些变量数据local template = require("resty.template") local context = {who = "guooo",from="usgrouping",jsons= {aaaa=123,bbbbb=23234}} //此处可调用mysql/redis,一同将数据写入template3.html文件中template.render("template3.html", context)
再看下静态页面模板长什么样:
{(header.html)} <!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus?"> <meta name="Author" content="usgrouping"> <meta name="Keywords" content="usgrouping,guooo"> <title>lua-template test</title> </head> <body> <div>你好{{who}},this is template page 3</div> <br/> <div>欢迎关注公众号:{{from}}</div> <br/> <br/> {{jsons}} </body></html>{(footer.html)} 其中header.html及footer.html是常用的头部和底部文件,这里只是简单的文本展示
经过上面的两大步,基本上就完成了动态数据经由Lua直接处理渲染成静态页面响应给前端,大大提高了执行效率。
有同学看了上一篇的例子,同时结合Lua连接mysql的例子发现,都是直接连接mysql/redis,而没有通过连接池的形式,其实完全可以使用连接池的形式,只不过此处为了说明原理,采用了直连的形式。
基于lua-nginx-module(openresty)的WEB应用防火墙
Nginx+Lua+Redis实现高性能缓存数据读取
介绍几款常用的在线API管理工具
你不得不知的几个互联网ID生成器方案
基于SpringCloud的Microservices架构实战案例-序篇
目前在使用的Windows下最好用的shell
如何编写无须人工干预的shell脚本
猜你喜欢
- 2024-10-04 Java并发:分布式应用限流 Redis + Lua 实践
- 2024-10-04 OpenResty(一)Lua openresty lua脚本灰度发布
- 2024-10-04 运维篇—基于Nginx+Lua实现的灰度发布
- 2024-10-04 Nginx与LUA(4) nginx lua优缺点
- 2024-10-04 高并发限流技术分析及实践 高并发限流方案
- 2024-10-04 Redis弱事务性与Lua脚本原子性分析
- 2024-10-04 像调试java一样来调试Redis lua redis调试工具
- 2024-10-04 Nginx与LUA(3) nginx与uwsgi详解
- 2024-10-04 企业级电商网站使用Nginx+Lua(OpenResty)实现高性能Web应用
- 2024-10-04 Lua 基础入门 lua语言零基础教程视频
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)