OpenResty(ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。
OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 乃至1000K以上并发连接响应的超高性能 Web 应用系统。
OpenResty 简单理解,相当于封装了nginx,并且集成了LUA脚本,开发人员只需要简单的其提供了模块就可以实现相关的逻辑,而不再像之前,还需要在nginx中自己编写lua的脚本,再进行调用了。
安装OpenRest
1
2
3
4yum install yum-utils yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo yum install openresty
默认安装在usr/local/openresty
Nginx
安装openresty会默认安装nginx在usr/local/openresty/nginx
修改usr/local/openresty/nginx/conf/nginx.conf
的第一行
1
2
3
4#user nobody; 配置文件第一行原来为这样, 现改为下面的配置。 #将配置文件使用的根设置为root,目的就是将来要使用lua脚本的时候 ,直接可以加载在root下的lua脚本。 user root root;
访问linux服务器地址,即可出现
1
2Welcome to OpenResty!
说明安装成功。
demo:微服务商城-openresty
1
2
3
4
5预计要实现的效果是: - 从mysql查询首页轮播广告大图 - 将数据存入到redis缓存 - 将数据储如nginx缓存
- Lua脚本 /root/lua/68/update_content.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48ngx.header.content_type="application/json;charset=utf8" local cjson = require("cjson") local mysql = require("resty.mysql") -- 获取用户请求的参数 (请求url链接的"?"后的参数) local uri_args = ngx.req.get_uri_args() -- 请求参数里的"id"参数的值 local id = uri_args["id"] -- 连接mysql数据库 local db = mysql:new() db:set_timeout(1000) -- 连接信息,host,port,database,user,password local props = { host = "127.0.0.1", port = 3306, database = "changgou_content", user = "root", password = "root" } -- 获取数据库连接 local res = db:connect(props) -- sql语句 local select_sql = "SELECT url,pic FROM tb_content WHERE STATUS ='1' AND category_id ="..id.." ORDER BY sort_order" -- 执行查询语句 res = db:query(select_sql) -- 关闭数据库 db:close() -- redis local redis = require("resty.redis") local red = redis:new() red:set_timeout(2000) -- redis的ip地址及端口 local ip ="127.0.0.1" local port = 6379 red:connect(ip,port) -- redis密码,如果没有就直接注释掉 red:auth("root") --调用API获取数据 local resp, err = red:get("hello") if not resp then ngx.say("get msg error : ", err) return close_redis(red) end -- 存储,key="content_1",value=res的json类型,(res为mysql数据库里查询出的数据) red:set("content_"..id,cjson.encode(res)) red:close() -- 输出true ngx.say("{flag:true}")
- 配置nginx的server,拦截
update_content?id=1
请求路径,交给lua脚本处理usr/local/openresty/nginx/conf/nginx.conf
1
2
3
4
5
6
7
8
9
10server { listen 80; server_name localhost; # 用户请求update_content?id=1,将该请求转到/root/lua/68/update_content.lua脚本处理 location /update_content { content_by_lua_file /root/lua/68/update_content.lua; }
- 重启nginx
1
2
3
4
5
6#进入nginx的sbin文件夹 /usr/local/openresty/nginx/sbin cd /usr/local/openresty/nginx/sbin #重启nginx ./nginx -s reload
访问http://127.0.0.1/update_content?id=1
,配置正确的话,就会从数据库查询然后在redis中看到出现key="content_1"的键值对。
下一篇:OpenResty实现缓存(nginx缓存)
https://blog.csdn.net/qq_43220949/article/details/113797684
实现了nginx读取redis数据进行缓存。
容易出现的错误有:
- mysql的连接信息,ip地址等,数据库不同的话,需要修改sql语句。
- local select_sql = “SELECT url,pic FROM tb_content WHERE STATUS =‘1’ AND category_id =”…id…" ORDER BY sort_order"语句ORDER前必须有一个空格,要不sql语句就是错误的。
- redis需要注意redis后台运行,ip地址,开放端口,防火墙,redis有密码需要添加
red:auth("root")
语句
lua写入文件:
1
2
3
4
5
6
7
8
9
10-- 写入文件函数,re2s是需要写入的数据,path是文件位置 function FileSaveLoad(re2s,path) file = io.open(path, "w"); assert(file); file:write(cjson.encode(re2s)); file:close(); end --调用函数 FileSaveLoad(res,"/root/lua/68/log.txt");
下一篇:OpenResty实现缓存(nginx缓存)
https://blog.csdn.net/qq_43220949/article/details/113797684
实现了nginx读取redis数据进行缓存。
最后
以上就是传统早晨最近收集整理的关于一、OpenResty(lua脚本读mysql,写入redis)的全部内容,更多相关一、OpenResty(lua脚本读mysql内容请搜索靠谱客的其他文章。
发表评论 取消回复