Redis Lua脚本


一、Lua语法

  1. 变量:分为全局变量和局部变量,局部变量的声明为local;

  2. 循环语句

    A. 普通for循环:

for 变量=初始值, 最终值, 步长 do
    语句
end

     B. 增强for循环,ipairs是Lua的内置函数,实现类似迭代器的功能,从索引1开始递增遍历到最后一个不为nil的整数索引;

for 变量1,变量2 in 迭代器 do
    语句
end

  3. 函数,无参数时括号也不要省略,使用return返回

function(参数列表)
    语句
end

     A. tonumber():string类型转number类型;

  4. 表类型

    A. a={},把一个空表赋值给a;

    B. a[key]=value,把value赋值给表a中的字段key;

    C. 引用:使用表.操作符,如:a.key;

    D. 如果用索引来引用,跟数组是一样的,如:a[1];

  4. table

    A. table.insert(table, [pos,] value):向数组中插入元素,pos为指定插入的索引;

    B. table.remove(table[,pos]):从数组中弹出一个元素。

  5. string

    A. sting.format():数据格式化;

   5. 其他库

    A. cjson.encode(表):把表序列化成字符串;

    B. cjson.decode(string):把字符串还原成为表;

    C. cmsgpack.pack(表):把表序列化成字符串;

    D. cmsgpack.unpack(字符串):把字符串还原成为表

二、Redis和Lua结合

  1. eval

    A. eval script numkeys keys args

      script:lua脚本;

      numkeys:指定键名参数集keys的个数;

      keys:键名参数集,通过全局变量KEYS数组表示,起始下标为1;

      args:键值参数集,通过全局变量ARGV数组表示,起始下标为1;

  2. redis.call:在脚本中调用Redis命令,遇到错误会直接返回;

  3. redis.log(loglevel,message):记录日志信息,日志级别为redis.LOG_DEBUG、redis.LOG_VERBOSE、redis.LOG_NOTICE、redis.LOG_WARNING;

可参考:Lua脚本开发