redis中的eval的使用定义:
eval script numkeys key [key ...] arg [arg ...]
script:lua的脚本
numkeys:需要传入的参数个数
key:参数的key 在脚本中可以通过KEYS[1]获取
arg: 参数的value 在脚本中可以通过ARGV[1]获取
一些练习
例1、打印hello world
eval "return 'hello world'" 0
例2、计算3+3
"local sum=3+3 return sum" 0
例3、取传入参数的value,key
eval "local sum=ARGV[1]+ARGV[2] return sum" 2 var1 var2 1 2
(integer) 3
eval "local k=KEYS[1]..':'..KEYS[2] return k" 2 var1 var2 0 0
"var1:var2"
例4、执行lua脚本文件,通过redis.call()来调用redis提供的api
./redis-cli --eval ../lua-script/lua-test.lua 0
"hello world~!"
lua脚本内容
local key ="test"
redis.call("set",key,"hello")
local msg = redis.call("get",key)
msg=msg.." world~!"
redis.call("set",key,msg)
return msg
例5、将脚本文件缓存到redis服务端,返回的是这个文件的hash值
./redis-cli script load "$(cat ../lua-script/lua-test.lua)"
"585a7f206dc4fd137299f8676f0f30fa4c526a9c"
执行缓存在redis服务端的lua脚本
./redis-cli evalsha "585a7f206dc4fd137299f8676f0f30fa4c526a9c" 0
"hello world~!"
例6、判断redis服务端是否存在脚本缓存,返回1代表存在,0代表不存在
[root@bogon bin]# ./redis-cli script exists "585a7f206dc4fd137299f8676f0f30fa4c526a9c"
1) (integer) 1
//把redis服务重启后,会清掉lua脚本缓存,再次进行查看,结果会返回0
[root@bogon bin]# ./redis-cli script exists "585a7f206dc4fd137299f8676f0f30fa4c526a9c"
1) (integer) 0