Nginx+Lua+MySQL/Redis实现高性能动态网页展现
2018-01-26 09:20
871 查看
Nginx结合Lua脚本,直接绕过Tomcat应用服务器,连接MySQL/Redis直接获取数据,再结合Lua中Template组件,直接写入动态数据,渲染成页面,响应前端,一次请求响应过程结束。最终达到下图的一个效果。
OpenResty的自带组件库默认已经集成了相当实用的组件,http://openresty.org/cn/components.html,如下所示:
LuaCjsonLibrary
LuaRestyMemcachedLibrary
LuaRestyMySQLLibrary
LuaRestyRedisLibrary
LuaRestyWebSocketLibrary
LuaRestyLimitTrafficLibrary
其它等等
Lua直接连接MySQL的代码,再结全上一篇中连接Redis的代码,可以完成从后端动态的索取数据。
[/code]
通过Lua从后端动态取数,需要将数据渲染到静态页面,此时需要引入Template组件,该组件已经在OpenResty中引入,所以勿须再次安装,直接使用即可。
[/code]
再看下静态页面模板长什么样:
[/code]
经过上面的两大步,基本上就完成了动态数据经由Lua直接处理渲染成静态页面响应给前端,大大提高了执行效率。
有同学看了上一篇的例子,同时结合Lua连接mysql的例子发现,都是直接连接mysql/redis,而没有通过连接池的形式,其实完全可以使用连接池的形式,只不过此处为了说明原理,采用了直连的形式。
》》》点击左下方的原文链接获取源码及相关资料。
基于lua-nginx-module(openresty)的WEB应用防火墙
Nginx+Lua+Redis实现高性能缓存数据读取
介绍几款常用的在线API管理工具
你不得不知的几个互联网ID生成器方案
基于SpringCloud的Microservices架构实战案例-序篇
目前在使用的Windows下最好用的shell
如何编写无须人工干预的shell脚本
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)
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)
[/code]
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)
[/code]
再看下静态页面模板长什么样:
{(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是常用的头部和底部文件,这里只是简单的文本展示
[/code]
经过上面的两大步,基本上就完成了动态数据经由Lua直接处理渲染成静态页面响应给前端,大大提高了执行效率。
有同学看了上一篇的例子,同时结合Lua连接mysql的例子发现,都是直接连接mysql/redis,而没有通过连接池的形式,其实完全可以使用连接池的形式,只不过此处为了说明原理,采用了直连的形式。
》》》点击左下方的原文链接获取源码及相关资料。
基于lua-nginx-module(openresty)的WEB应用防火墙
Nginx+Lua+Redis实现高性能缓存数据读取
介绍几款常用的在线API管理工具
你不得不知的几个互联网ID生成器方案
基于SpringCloud的Microservices架构实战案例-序篇
目前在使用的Windows下最好用的shell
如何编写无须人工干预的shell脚本
相关文章推荐
- Nginx+Lua+MySQL/Redis实现高性能动态网页展现
- Nginx 通过 Lua + Redis 实现动态封禁 IP
- Nginx+Lua+Redis实现高性能缓存数据读取
- Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!
- Nginx嵌入Lua语言实现redis的高性能http接口
- 基于nginx + lua实现的反向代理动态更新
- 高性能网站架构之负载均衡 Nginx+tomcat+redis实现tomcat集群
- 实现线上高性能接口方案nginx负载tornado后端lua数据 推荐
- nginx+lua+redis实现后端反爬虫(未完成)
- nginx+lua实现简单的waf网页防火墙功能
- Tomcat+Nginx+Redis+MySQL实现反向代理、负载均衡、session共享
- 高性能网站架构之负载均衡的Nginx + tomcat的+ Redis的实现tomcat的集群
- redis缓存服务器(Nginx+Tomcat+redis+MySQL实现session会话共享
- 基于nginx+lua+redis高性能api应用实践
- 利用nginx+lua+redis实现反向代理方法教程
- 图文并茂超详细搭建redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享) 推荐
- Nginx技术研究系列2-基于Redis实现动态路由
- 高性能网站架构之负载均衡 Nginx+tomcat+redis实现tomcat集群
- nginx+lua+redis实现验证码防采集 - yanggd1987的专栏 - 博客频道 - CSDN.NET
- redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享) 推荐