【Redis学习系列】使用Lua脚本

  • Lua脚本:Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
  • 使用脚本的好处:
  1. 减少网络开销,在Lua脚本中可以把多个命令放在同一个脚本中运行。
  2. 原子操作,redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。换句话说,编写脚本的过程中无需担心会出现竞态条件。
  3. 复用性,客户端发送的脚本会永远存储在redis中,这意味着其他客户端可以复用这一脚本来完成同样的逻辑 。
  • Lua在linux中的安装

  1. 到官网下载lua的tar.gz的源码包http://www.lua.org/versions.html
  2. tar -zxvf lua-5.3.5.tar.gz
  3. 进入解压的目录:cd lua-5.2.0
  4. make linux  (linux环境下编译)
  5. make install
  6. 如果报错,说找不到readline/readline.h,

可以通过yum命令安装 yum -y install readline-devel ncurses-devel

安装完以后再  make linux  / make install

最后,直接输入 lua命令即可进入lua的控制台

 

  • 基础
全局变量:a=1

局部变量:local  a=2

逻辑表达式:+  -  *  /  %

比较两个值是否相等:a==b

不等于:~=

类型不能够自动转换

逻辑运算符:and/or

逻辑非:not(a and b)

字符串拼接:a..b

计算字符长度:#

    • 循环:
for i=1,100 do
  print(i)
end
    • 遍历数组:
local xx={"a","b","c"}
for  i,v  in   ipairs(xx)  do print(v)  end
    • 注释:
范围注释:--[[ ]]  
单行注释:-- 
    • 函数:
local add(a,b)
return a+b
end
print(add(1,2))
  • redis中执行lua脚本

 1 Redis提供了EVAL命令可以使开发者像调用其他Redis内置命令一样调用脚本。
 2 
 3 [EVAL]  [脚本内容] [key参数的数量]  [key …] [arg …]
 4 
 5 可以通过key和arg这两个参数向脚本中传递数据,他们的值可以在脚本中分别使用KEYS和ARGV 这两个类型的全局变量访问。
 6 
 7 比如我们通过脚本实现一个set命令,通过在redis客户端中调用,那么执行的语句是:
 8 
 9 lua脚本的内容为: return redis.call(‘set’,KEYS[1],ARGV[1])         //KEYS和ARGV必须大写
10 
11 eval "return redis.call('set',KEYS[1],ARGV[1])" 1 hello world
12 
13 EVAL命令是根据 key参数的数量-也就是上面例子中的1来将后面所有参数分别存入脚本中KEYS和ARGV两个表类型的全局变量。
14 
15 当脚本不需要任何参数时也不能省略这个参数。如果没有参数则为0
16 
17 eval "return redis.call(‘get’,’hello’)" 0
View Code

 

 

 

 

posted @ 2019-03-26 16:22  21karat  阅读(381)  评论(0编辑  收藏  举报