《Redis使用手册之Lua脚本》
EVAL:执行脚本
-  127.0.0.1:6379> eval “return ‘hello world’” 0 
 “hello world”127.0.0.1:6379> eval “return redis.call(‘set’,KEYS[1],ARGV[1])” 1 “message” “hello world” 
 OK
 127.0.0.1:6379> get message
 “hello world”EVAL:执行脚本 EVAL script numkeys key [key …] arg [arg …] script参数用于传递脚本本身。 numkeys参数用于指定脚本需要处理的键数量,根据Lua的惯例, KEYS数组的索引将以1为开始:访问KEYS[1]可以取得第一个传入的key参数,访问KEYS[2]可以取得第二个传入的key参数,以此类推。 任意多个arg参数用于指定传递给脚本的附加参数,这些脚本可以在脚本中通过ARGV数组进行访问,与KEYS参数一样,ARGV数组的索引也是以1为开始的。 使用脚本执行Redis命令 redis.call(command, …) redis.pcall(command, …) 这两个函数接受的第一个参数都是被执行的Redis命令的名字,而后面跟着的则是任意多个命令参数。 在lua脚本中执行Redis命令所使用的格式与redis-cli客户端中执行Redis命令所使用的格式是完全一样的。 EVAL:执行脚本 
SCRIPT LOAD和EVALSHA:缓存并执行脚本
-  127.0.0.1:6379> script load “return ‘hello world’” 
 “5332031c6b470dc5a0dd9b4bf2030dea6d65de91”
 127.0.0.1:6379> script load “redis.call(‘SET’,KEYS[1],ARGV[1]); return redis.call(‘GET’,KEYS[1])”
 “27f72464d4122016431244ae33526a5fb72014f3”
 127.0.0.1:6379> evalsha “5332031c6b470dc5a0dd9b4bf2030dea6d65de91” 0
 “hello world”
 127.0.0.1:6379> evalsha “27f72464d4122016431244ae33526a5fb72014f3” 1 “msg”127.0.0.1:6379> evalsha “27f72464d4122016431244ae33526a5fb72014f3” 1 “msg” “Ciao!” 
 “Ciao!”
 127.0.0.1:6379> script exists 27f72464d4122016431244ae33526a5fb72014f3 5332031c6b470dc5a0dd9b4bf2030dea6d65de91(integer) 1 (integer) 1 
 127.0.0.1:6379> script flush
 OK
 127.0.0.1:6379> script exists 27f72464d4122016431244ae33526a5fb72014f3 5332031c6b470dc5a0dd9b4bf2030dea6d65de91(integer) 0 (integer) 0 
 127.0.0.1:6379> script killSCRIPT LOAD和EVALSHA:缓存并执行脚本 SCRIPT LOAD script 用户通过EVALSHA命令来执行已被缓存的脚本 EVALSHA sha1 numkeys key[key …] arg[arg …] 
  除了第一个参数接受的事Lua脚本对应的SHA1校验和而不是脚本本身之外,EVALSHA命令的其他参数与EVAL命令的参数都是相同的。 除了SCRIPT LOAD之外,EVAL命令在执行完脚本之后也会把被执行的脚本缓存起来,以供之后使用。 通过Lua脚本缓存,我们可以将需要重复执行的Lua脚本缓存在服务器中,然后通过EVALSHA命令来执行已缓存的脚本,从而将执行Lua脚本所需耗费的网络带宽降至最低。 SCRIPT LOAD和EVALSHA:缓存并执行脚本