在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Lua 高效的轻量级脚本语言 Redis允许开发者使用Lua语言编写脚本传到Redis中执行。在lua脚本中可以调用大部分的redis命令。 优点:
1. 数据类型: Lua是一个动态类型语言,一个变量可以存储任何类型的值。
2. 变量: Lua变量分为全局变量和局部变量。全局变量无需声明就可以直接使用,默认值为Nil. 在redis脚本中不能使用全局变量,只允许使用局部变量以防止脚本之间相互影响。声明局部变量的方法为local变量名。 3. 注释: 单行 -- 单行注释 多行 --[[ 这是一个多行注释 ]] 4. 赋值: 支持多重赋值 Local a,b = 1,2 Local c,d =1,2,3 (3被舍弃) 5. 操作符: 数学操作符:+、-、*、/、%、—(一元操作符,取负)、^(幂运算符号) 比较操作符:==、~=(与==结果取反)、<、>、<=、>= 逻辑运算符:not、and、or not:根据操作数的真和假相应的返回false和true(只要操作数不是nil或false为真) and:a and b a是真返回b,否则返回a or : a or b a是假则返回a,否则返回b 连接操作符:.. Print(‘hello’..’ ’ ..’world!’) -- ‘hello world!’ 取长度操作符:# Print(#’hello’) -- 5 6. If语句 If exp1 then Xxx Elseif exp2 then Xxx Else Xxx End ;可省略,不强制要求缩进 7. 循环语句 Lua支持while、repeat和for循环语句 While exp1 do Xxx End Repeat Xxx Until exp2 For 变量= 初值,终值,步长 do Xxx End
8. 表类型 表是Lua中唯一的数据结构,可以理解为关联数组,任何类型的值都可以作为表的索引。 a = {} a[‘field’] = ‘value’ print(a.field)
people={ name=’bob’ age=29}
a={} a[1]=’bob’ a[2]=’jeff’ 相当于 a = {‘bob’,’jeff’} Lua约定数组的索引是从1开始的,而不是0; 迭代器:ipairs/pairs 前者只会从索引1开始递增遍历到最后一个值不为nil的证书索引。 后者会遍历所有值不为nil的索引。 9. 函数 Function(参数列表) 函数体 End Local square = function(num) -- 如果没有参数,()也不能省略 Return num*num End 相当于 Local function square (num) Return num*num End
Lua标准库 Lua标准库中提供了很多实用的函数,redis支持大部分lua标准库。 1. string库 string.len(string) 获取字符串长度 string.lower(string) 转换为小写 string.upper(string) 转换为大写 string.sub(string,start[,end]) 获取子字符串 2. Table库 Table.concat(table[,sep[,i[,j]]]) 将数组转换为字符串 Table.insert(table,[pos,] value) 向数组中插入元素 Table.remove(table[,pos]) 从数组中弹出一个元素 3. Math库 4. 其他库 Redis通过cjson库和cmsgpack库提供了对JSON和MessagePack的支持。Redis自动加载了这两个库,在脚本中可以分别通过cjson和cmsgpack两个全局变量来访问对应的库。 Redis与Lua 1. 在脚本中调用redis命令 reids.call(‘set’,’foo’,’bar’) local value = redis.call(‘get’,’foo’) -- value的值为bar
redis.pcall与redis.call功能相同,唯一的区别是当命令执行出错时redis.pcall会记录错误并继续执行,而redis.call会直接返回错误,不会继续执行。 2. 从脚本中返回值 使用return语句将值返回给客户端。 脚本相关命令
Redis> EVAL “return redis.call(‘set’,KEYS[1],ARGC[1])” 1 foo bar Redis> get foo “bar” Redis的脚本执行此是原子的。所有命令必须等到脚本执行完成后才能执行,为了防止某个脚本执行时间过长导致redis无法提供服务,redis提供了Lua-time-limit参数限制脚本的最长运行时间,默认为5秒。
|
请发表评论