前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx+Lua+MySQL/Redis实现高性能动态网页展现

Nginx+Lua+MySQL/Redis实现高性能动态网页展现

作者头像
MavenTalker
发布2023-03-08 16:01:23
4060
发布2023-03-08 16:01:23
举报
文章被收录于专栏:歪脖贰点零歪脖贰点零

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的代码,可以完成从后端动态的索取数据。

代码语言:javascript
复制
--测试连接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)
    return
end

db: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)
end

local 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)
end

for 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中引入,所以勿须再次安装,直接使用即可。

代码语言:javascript
复制
--测试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) 

再看下静态页面模板长什么样:

代码语言:javascript
复制
{(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,而没有通过连接池的形式,其实完全可以使用连接池的形式,只不过此处为了说明原理,采用了直连的形式。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MavenTalk 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OpenResty组件
  • Lua-mysql 连接mysql
  • Lua-template 模板技术
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档