openResty中正则表达式的使用

在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 Nginx 的规范;即使您对 Lua 语言中的规范非常熟悉,我们仍不建议使用 Lua 中的正则表达式。

  1. 因为 Lua 中正则表达式的性能并不如 Nginx 中的正则表达式优秀;
  2. Lua 中的正则表达式并不符合 POSIX 规范,而 Nginx 中实现的是标准的 POSIX 规范,后者明显更具备通用性。

继续阅读

openResty中的ngx.location.capture和ngx.location.capture_multi的使用

在openResty中,ngx.location.capture_multi是一个非常强大的功能。可以应用于并发多个相互之间没有依赖的请求。在现代的应用架构中经常使用微服务,提供低粒度的接口;但在客户端(例如:app、网页服务)经常需要请求多个微服务接口,才能完整显示页面内容。

例如:打开一个商品详情页,需要请求:

  1. banner广告接口;
  2. 商品详情;
  3. 商品评论等。

那么ngx.location.capture_multi就派上大用场了,当然使用ngx.location.capture_multi不是唯一的办法,呵呵~。下面就来看看这个东东的用法;

继续阅读

openResty中ngx_lua模块提供的API

ngx_lua模块的原理:

  1. 每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM;
  2. 将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问;
  3. 每个外部请求都由一个Lua协程处理,协程之间数据隔离;
  4. Lua代码调用I/O操作等异步接口时,会挂起当前协程(并保护上下文数据),而不阻塞worker;
  5. I/O等异步操作完成时还原相关协程上下文数据,并继续运行

系列文章:
指令:openResty中ngx_lua模块提供的指令
常量:openResty中ngx_lua模块提供的常量
API:openResty中ngx_lua模块提供的API

继续阅读

openResty中ngx_lua模块提供的常量

ngx_lua模块的原理:

  1. 每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM;
  2. 将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问;
  3. 每个外部请求都由一个Lua协程处理,协程之间数据隔离;
  4. Lua代码调用I/O操作等异步接口时,会挂起当前协程(并保护上下文数据),而不阻塞worker;
  5. I/O等异步操作完成时还原相关协程上下文数据,并继续运行

系列文章:
指令:openResty中ngx_lua模块提供的指令
常量:openResty中ngx_lua模块提供的常量
API:openResty中ngx_lua模块提供的API

继续阅读

openResty中ngx_lua模块提供的指令

ngx_lua模块的原理:

  1. 每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM;
  2. 将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问;
  3. 每个外部请求都由一个Lua协程处理,协程之间数据隔离;
  4. Lua代码调用I/O操作等异步接口时,会挂起当前协程(并保护上下文数据),而不阻塞worker;
  5. I/O等异步操作完成时还原相关协程上下文数据,并继续运行

系列文章:
指令:openResty中ngx_lua模块提供的指令
常量:openResty中ngx_lua模块提供的常量
API:openResty中ngx_lua模块提供的API

继续阅读

openResty学习中的知识点(一)

1、变量申明后,默认的值是nil;将 nil 赋给变量后,相当于删除变量。注意nil 和 ngx.null的区别。

2、在 lua中只有 false和 nil 值为 false ,其他值都为 true ,包括0,””等

3、lua中的数字(一切数字)都是 number类型。

4、table 的下标从 1 开始。

5、逻辑运算法 and 、or 、not的用法。

继续阅读

BeansTalkd的命令

一、BeanstalkD协议

Beanstalk协议使用ASCII编码,运行在TCP协议之上。客户端负责主动建立连接,发送命令和数据,等待响应以及关闭连接。对于每个连接,服务端以接收请求的顺序串行地处理命令,并按相同的顺序发送响应。协议中所有的数字都是十进制并且非负的(除非有明确说明)。

协议中的名字都是ASCII字符串。名字可以包含字母(A-Z和a-z)、 数字(0-9)、连字符(”-“)、 加(”+”)、 斜线(”/”)、 分号(”;”)、 点(”.”)、 美元符号(”$”)、下划线(”_”)和括号(“(”和”)”),但是不能以连字符开头。名字以空格或换行结束。每个名字至少要有一个字符的长度。

继续阅读

BeansTalkd的使用与安装

一、Beanstalkd的特点

  • Beanstalkd 是一个轻量级、高性能的消息队列中间件,它最大特点是将自己定位为基于管道  (tube) 和任务 (job) 的工作队列 (work-queue)。
  • Beanstalkd 支持任务(job)优先级 (priority), 延时 (delay), 超时重发 (time-to-run) 和预留 (buried), 能够很好的支持分布式的后台任务和定时任务处理。
  • Beanstalkd的内部实现采用 libevent, 服务器-客户端之间用类似 memcached 的轻量级通讯协议,具有有很高的性能。
  • 尽管是内存队列, beanstalkd 提供了 binlog 机制, 当重启 beanstalkd 时,当前任务状态能够从纪录的本地 binlog 中恢复。

继续阅读

Redis中的Lua脚本

使用Lua脚本的好处:

  • 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延
  • 原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。
  • 复用。客户端发送的脚步会永久存在redis中,这样,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑。

调用Lua脚本的语法:

继续阅读

[转]理解OAuth 2.0

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为RFC 6749。

一、应用场景

为了理解OAuth的适用场合,让我举一个假设的例子。

有一个”云冲印”的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让”云冲印”读取自己储存在Google上的照片。

继续阅读

PostgreSQL中的系统环境变量

在学习PostgreSQL的过程中,发现PgSQL中可以设置一些系统环境变量,以及同名的数据库、同名的数据库用户,对于新手来说可能回产生一些困扰。

一、系统用户、角色、数据库

系统用户:指操作系统用户,在cat /etc/passwd中可以查看的用户。比方说超级用户 root 、执行PgSQL的用户postgre、执行mysql的用户mysql等。

角色:数据库中的用户,在psql的 shell 中可以通过 select rolname from pg_roles; 查看到的用户。

数据库:数据库名,可以通过psql -l 查看。

继续阅读

PostgreSQL的pg_hba.conf 客户端认证

认证是数据库服务器对客户端用户身份鉴别的过程,并且确定客户端以该用户是否可以连接数据库服务器。PostgreSQL提供多种不同的客户端认证方式,而pg_hba.conf就是客户端认证的配置文件,pg_hba即PostGreSQL host-base authentication的简称。

继续阅读

微信小程序的app.json配置

app.json文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。下面对app.json文件进行逐个分析:

Tips : 该文件时一个json文件,故不支持注释

继续阅读

MySQL的安装与配置

本来是在学习PostgreSQL,想安装个mySQL 5.7 做一些实践比较,但发现 mysql5.7在centos 7.2上,使用 YUM 怎么也安装不上。刚开始是和MariaDB冲突(centos7.2默认自带mariaDB),使用

rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64

强制卸载后,紧接又提示:

2:postfix-2.10.1-6.el7.x86_64 有缺少的需求 libmysqlclient.so.18()(64bit)
2:postfix-2.10.1-6.el7.x86_64 有缺少的需求 libmysqlclient.so.18(libmysqlclient_18)(64bit)

无奈之下,才写了这一篇安装mysql5.7的笔记。

继续阅读