openresty best practices

访问有授权验证的 Redis对于有授权验证的 Redis,正确的认证方法,请参考下面例子: 123456789101112131415161718192021222324252627282930313233343536373839404142434445server { location /test { content_by_lua_block ...

发布于 

openresty best practices

动态生成的 lua-resty-redis 模块方法刚接触 lua-resty-redis 的文档的时候,你可能会惊讶于上面列出的方法之少。Redis 有好几十个命令,而Method一节列出的方法却寥寥无几。事实上,如果仔细阅读了文档,你会在 Method 一节的开头读到这么一段话: All of the Redis commands have their own methods with...

发布于 

openresty best practices

Redis 接口的二次封装 先看一下官方的调用示例代码: 1234567891011121314151617181920212223242526local redis = require "resty.redis"local red = redis:new()red:set_timeout(1000) -- 1 seclocal ok, err = red:connec...

发布于 

openresty best practices

pipeline 压缩请求数量通常情况下,我们每个操作 Redis 的命令都以一个 TCP 请求发送给 Redis,这样的做法简单直观。然而,当我们有连续多个命令需要发送给 Redis 时,如果每个命令都以一个数据包发送给 Redis,将会降低服务端的并发能力。 为什么呢?大家知道每发送一个 TCP 报文,会存在网络延时及操作系统的处理延时。大部分情况下,网络延时要远大于 CPU 的处理延时...

发布于 

openresty best practices

Redis 接口的二次封装(发布订阅)其实这一小节完全可以放到上一个小节,只是这里用了完全不同的玩法,所以我还是决定单拿出来分享一下这个小细节。 上一小节有关订阅部分的代码,请看: 1234567891011121314151617181920212223242526function _M.subscribe( self, channel ) local redis, err = re...

发布于 

openresty best practices

script 压缩复杂请求从pipeline章节,我们知道对于多个简单的 Redis 命令可以汇聚到一个请求中,提升服务端的并发能力。然而,在有些场景下,我们每次命令的输入需要引用上个命令的输出,甚至可能还要对第一个命令的输出做一些加工,再把加工结果当成第二个命令的输入。pipeline 难以处理这样的场景。庆幸的是,我们可以用 Redis 里的 script 来压缩这些复杂命令。 scri...

发布于 

openresty best practices

select + set_keepalive 组合操作引起的数据读写错误在高并发编程中,必须要使用连接池技术,通过减少建连、拆连次数来提高通讯速度。 错误示例代码: 1234567891011121314151617181920212223242526272829303132333435363738local redis = require "resty.redis"lo...

发布于 

2023-09-28

函数的参数按值传递Lua 函数的参数大部分是按值传递的。值传递就是调用函数时,实参把它的值通过赋值运算传递给形参,然后形参的改变和实参就没有关系了。在这个过程中,实参是通过它在参数表中的位置与形参匹配起来的。 示例代码: 1234567891011121314151617local function swap(a, b) --定义函数swap,函数内部进行交换两个变量的值 local...

发布于 

2023-09-28

函数返回值Lua 具有一项与众不同的特性,允许函数返回多个值。Lua 的库函数中,有一些就是返回多个值。 示例代码:使用库函数 string.find,在源字符串中查找目标字符串,若查找成功,则返回目标字符串在源字符串中的起始位置和结束位置的下标。 12local s, e = string.find("hello world", "llo")pr...

发布于 

2023-09-28

控制结构 if-elseif-else 是我们熟知的一种控制结构。Lua 跟其他语言一样,提供了if-else 的控制结构。因为是大家熟悉的语法,本节只简单介绍一下它的使用方法。 单个 if 分支 型1234x = 10if x > 0 then print("x is a positive number")end 运行输出:x is a positive...

发布于 

本站由 @anonymity 使用 Stellar 主题创建。