OpenResty和Lua
文章平均质量分 63
张俊杰zjj
一个大龄的码农.目前是Java+Python开发,业余时间研究减肥健身养生,后期可能会去做减肥健身博主.
展开
-
在 OpenResty 开发中遇到的那些和 Lua 相关的坑。
出自 温铭 -OpenResty从入门到实战 专栏在前面内容中,我们提到了一些 Lua 和其他开发语言不同的点,比如下标从 0 开始、默认全局变量等等。在 OpenResty 实际的代码开发中,我们还会遇到更多和 Lua、 LuaJIT 相关的问题点, 下面我会讲其中一些比较常见的。这里要先提醒一下,即使你知道了所有的 坑,但不可避免的,估计还是要自己踩过之后才能印象深刻。当然,不同的是,你能够更块地从坑里面爬出来,并找到症结所在。下标从 0 开始还是从 1 开始第一个坑,Lua 的下标是从 1 开原创 2021-06-16 13:29:14 · 875 阅读 · 0 评论 -
Lua 独有的或不太常用的概念
出自 温铭 -OpenResty从入门到实战 专栏弱表首先是 弱表(weak table),它是 Lua 中很独特的一个概念,和垃圾回收相关。和其他高级语言一样,Lua 是自动垃圾回收的,你不用关心具体的实现,也不用显式 GC。没有被引用到的空间,会被垃圾收集器自动完成回收。但简单的引用计数还不太够用,有时候我们需要一种更灵活的机制。举个例子,我们把一个 Lua 的对象 Foo(table 或者函数)插入到 table tb 中,这就会产生对这个对象 Foo 的引用。即使没有其他地方引用 Foo,tb原创 2021-06-12 13:50:54 · 259 阅读 · 1 评论 -
剖析Lua唯一的数据结构table和metatable特性
和其他具有丰富数据结构的脚本语言不同,LuaJIT 中只有 table 这一个数据结构,并没有区分开数组、哈希、集合等概念,而是揉在了一起。让我们先温习下之前提到过的一个例子:local color = {first = "red", "blue", third = "green", "yellow"}print(color["first"]) --> output: redprint(color[1])原创 2021-06-12 13:16:25 · 886 阅读 · 0 评论 -
LuaJIT分支和标准Lua有什么不同?
这节课,我们来学习下 OpenResty 的另一块基石:LuaJIT。今天主要的篇幅,我会留给 Lua 和 LuaJIT 中重要和鲜为人知的一些知识点。而更多 Lua 语言的基础知识,你可以通过搜索引擎或者 Lua 的书籍自己来学习,这里我推荐 Lua 作者编写的《Lua 程序设计》这本书。当然,在 OpenResty 中,写出正确的 LuaJIT 代码的门槛并不高,但要写出高效的 LuaJIT 代码绝非易事,这里的关键内容,我会在后面 OpenResty 性能优化部分详细介绍。我们先来看下 LuaJI原创 2021-06-12 12:49:59 · 5713 阅读 · 1 评论 -
Lua常用标准库
很多时候,我们学习一门语言,其实就是在学习它的标准库。Lua 比较小巧,内置的标准库并不多。而且,在 OpenResty 的环境中,Lua 标准库的优先级是很低的。对于同一个功能,我更推荐你优先使用 OpenResty 的 API 来解决,然后是 LuaJIT 的库函数,最后才是标准 Lua 的函数。OpenResty的API > LuaJIT的库函数 > 标准Lua的函数,这个优先级后面会被反复提及,它不仅关系到是否好用这一点,更会对性能产生非常大的影响。不过,尽管如此,在实际的项目开发原创 2021-06-12 12:24:26 · 1542 阅读 · 1 评论 -
Lua数据类型
简介Lua 中的数据类型不多,你可以通过 type 函数来返回一个值的类型,比如下面这样的操作:$ resty -e 'print(type("hello world")) print(type(print)) print(type(true)) print(type(360.0)) print(type({})) print(type(nil)) '会打印出如下内容:string function boolean number table nil原创 2021-06-12 12:12:36 · 536 阅读 · 1 评论 -
OpenResty 安装后的目录结构
主要包含了 bin、luajit、lualib、nginx、pod 这几个子目录.[root@zjj101 openresty]# ll总用量 252drwxr-xr-x. 2 root root 123 6月 11 16:45 bin-rw-r--r--. 1 root root 22924 6月 11 16:45 COPYRIGHTdrwxr-xr-x. 6 root root 56 6月 11 16:45 luajitdrwxr-xr-x. 6 root ro原创 2021-06-12 11:44:28 · 1486 阅读 · 0 评论 -
OpenResty读取Lua脚本的案例
编写Lua脚本路径在/lua/hello.lua编写 hello.lua 内容: ngx.say("hello, world")[root@zjj101 lua]# pwd/lua[root@zjj101 lua]# cat hello.lua ngx.say("hello, world")[root@zjj101 lua]#配置OpenResty的nginx.conf配置文件nginx.conf文件修改内容http模块儿里面添加server模块儿 server原创 2021-06-12 11:44:20 · 488 阅读 · 0 评论 -
OpenResty关闭Lua脚本缓存-lua_code_cache
lua_code_cache 说明nginx+lua开发时因为已经加载进内存,修改lua脚本不会起作用,这样不方便调试。nginx配置中将lua_code_cache配置成on/off来控制是否关闭lua 的cache缓存,如果设置为off.则每次修改lua脚本都会重新加载新的lua代码,从而实现快速调试响应。同时状态为off时启动或重启nginx都会提示:nginx: [alert] lua_code_cache is off; this will hurt performance in /path/t原创 2021-06-12 11:44:13 · 2368 阅读 · 0 评论 -
OpenResty编写HelloWorld案例
修改nginx.conf配置文件修改 /usr/local/openresty/nginx/conf 路径下的nginx.conf 配置文件在http模块儿里面添加 server { listen 8080; location / { content_by_lua ' ngx.say("hello, world") '; } }热加载配置文件在任意一个地方执原创 2021-06-12 11:44:39 · 263 阅读 · 0 评论 -
OpenResty配置环境变量
修改/etc/profile配置文件内容是:# 配置OpenResty环境变量export OPENRESTY_HOME=/usr/local/openresty/export PATH=${OPENRESTY_HOME}/bin:$PATH#设置rocketmq环境变量export ROCKETMQ_HOME=/root/soft/rocketmq-all-4.4.0-bin-releaseexport PATH=${ROCKETMQ_HOME}/bin:$PATH刷新配置文件执行原创 2021-06-11 17:13:19 · 1388 阅读 · 0 评论 -
3.OpenResty 的三大特性
详尽的文档和测试用例没错,文档和测试是判断开源项目是否靠谱的关键指标,甚至是排在代码质量和性能之前的。OpenResty 的文档非常详细,作者把每一个需要注意的点都写在了文档中。绝大部分时候,我们只需要仔细查看文档,就能解决遇到的问题,而不用谷歌搜索或者是跟踪到源码中。为了方便起见,OpenResty 还自带了一个命令行工具restydoc,专门用来帮助你通过 shell 查看文档,避免编码过程被打断。不过,文档中只会有一两个通用的代码片段,并没有完整和复杂的示例,到哪里可以找到这样的例子呢?对于原创 2021-06-11 16:55:12 · 469 阅读 · 0 评论 -
2.OpenResty 的发展
OpenResty 并不像其他的开发语言一样从零开始搭建,而是基于成熟的开源组件——NGINX 和 LuaJIT。OpenResty 诞生于 2007 年,不过,它的第一个版本并没有选择 Lua,而是用了 Perl,这跟作者章亦春的技术偏好有很大关系。但 Perl 的性能远远不能达到要求,于是,在第二个版本中,Perl 就被 Lua 给替换了。 不过,在 OpenResty 官方的项目中,Perl 依然占据着重要的角色,OpenResty 工程化方面都是用 Perl 来构建,比如测试框架、Linter、C原创 2021-06-11 16:52:16 · 307 阅读 · 0 评论 -
1.为什么学习 OpenResty
为什么学习 OpenResty,这是开篇的第一个问题。我们正身处技术日新月异的时代,经常听到周围的工程师开玩笑说,学不动了。人的精力有限,选择学习某个技术都会有机会成本。最好的选择,是从你工作中涉及到的部分出发,学以致用。 对于服务端工程师来说,如果你的工作中涉及到 NGINX、高性能、高并发、动态控制、性能测试和分析等,那么不管开发语言和平台是什么,这门 OpenResty 课程都会让你有所裨益。如果你之前没有接触过 OpenResty,我确信它会给你打开另外一个服务端世界的大门。 OpenRest原创 2021-06-11 16:51:36 · 238 阅读 · 1 评论 -
Linux安装OpenResty
说明Linux 是Centos7安装依次执行下面的命令:# 安装依赖库:yum install -y pcre-devel openssl-devel gcc curl# 下载版本 wget https://openresty.org/download/openresty-1.15.8.1.tar.gz# 解压 tar -xzvf openresty-1.15.8.1.tar.gz# 进入解压目录 cd openresty-1.15.8.1/ # 检查配置环境, 生成 Makefi原创 2021-06-11 16:48:56 · 2550 阅读 · 0 评论