随笔分类 - openresty
摘要:定时任务 在 OpenResty 中,有时候需要在后台定期地执行某些任务,比如同步数据、清理日志等。最容易想到的方法,便是对外提供一个 API 接口,在接口中完成这些任务; 然后用系统的 crontab 定时调用 curl,来访问这个接口,进而曲线地实现这个需求。 不过,这样会给运维带来更高的复杂度
阅读全文
摘要:cosocket 是各种 lua-resty-* 非阻塞库的基础,没 有 cosocket,开发者就无法用 Lua 来快速连接各种外部的网络服务。 在早期的 OpenResty 版本中,如果想要去与 Redis、memcached 这些服务交互的话,需要使用 redis2-nginx-module、
阅读全文
摘要:在 Lua 中, table 是唯一的数据结构。共享内存字典shared dict, 是在 OpenResty 编程中最为重要的数据结构。它不仅支持数据的存放和读取,还支持原子计数和队列操作。 基于 shared dict,可以实现多个 worker 之间的缓存和通信,以及限流限速、流量统计等功能。
阅读全文
摘要:原理 回顾一下OpenResty的架构图 OpenResty 的 master 和 worker 进程中,都包含一个 LuaJIT VM。在同一个进程内的所有协程,都会共享这个 VM,并在这个 VM 中运行 Lua 代码。 在同一个时间点上,每个 worker 进程只能处理一个用户的请求,也就是只有
阅读全文
摘要:LuaJIT 中只有 table 这一个数据结构,并没有区分开数组、哈 希、集合等概念,而是揉在了一起。 之前的一个例子: local color = {first = "red", "blue", third = "green", "yellow"} print(color["first"]) -
阅读全文
摘要:OpenResty 的两个基石:NGINX 和 LuaJIT。 NGINX基础 在 OpenResty 的开发中,我们需要注意下面几点: 要尽可能少地配置 nginx.conf; 避免使用if、set 、rewrite 等多个指令的配合; 能通过 Lua 代码解决的,就别用 NGINX 的配置、变量
阅读全文