Lua 脚本的基本语法如下:
变量与赋值:
variable = value
变量名可以是字母、数字和下划线的组合,以字母或下划线开头。Lua 是动态类型语言,无需事先声明变量类型。
控制结构:
a) 条件语句:
if condition then
-- code block
elseif condition then
-- code block
else
-- code block
end
b) 循环语句:
while condition do
-- code block
end
for variable = start, end, step do
-- code block
end
repeat
-- code block
until condition
函数定义:
function name(parameter1, parameter2)
-- code block
return value
end
函数可以有参数和返回值。
表(table):
表是 Lua 中的一种数据结构,用于存储多个值。它可以通过索引来访问和修改其中的值。
table_name = {
key1 = value1,
key2 = value2,
key3 = value3
}
模块与包:
Lua 的模块与包用于组织和封装代码。模块可以被其他脚本引用和调用。
-- 定义模块
local module_name = {}
function module_name.function_name()
-- code block
end
return module_name
-- 调用模块
local module_name = require("module_name")
module_name.function_name()
输入输出:
-- 控制台输入
variable = io.read()
-- 控制台输出
print(variable)
使用 io.read()
可以从控制台读取用户输入,使用 print()
可以将结果输出到控制台。
-- Lua脚本代码
local counterKey = KEYS[1] -- 键
local increment = ARGV[1] -- 要增加的计数值
local current = tonumber(redis.call('GET', counterKey)) -- 获取当前计数值
if current then
current = current + tonumber(increment) -- 计数增加
else
current = tonumber(increment) -- 如果计数不存在,则设置为初始值
end
redis.call('SET', counterKey, current) -- 更新计数值
return current -- 返回新的计数值
请注意,上述例子使用了两个特殊的全局变量KEYS
和ARGV
,它们分别表示传递给脚本的键和参数。在执行脚本时,需要将键和参数作为额外的参数传递给EVAL
或EVALSHA
命令。例如,如果假设键为mycounter
,要增加的计数值为3
,那么可以使用以下命令来执行上述Lua脚本:
EVAL "local counterKey = KEYS[1] ... " 1 mycounter 3
在Redis中使用Lua脚本可以通过EVAL
或EVALSHA
命令来执行。EVAL
接受脚本作为参数,并将其作为字符串传递给Redis服务器进行解释和执行。EVALSHA
与EVAL
类似,但是它需要传递脚本的SHA1散列值,而不是脚本本身。通过将脚本进行预编译并将其存储在Redis的脚本缓存中,可以提高性能