1、客户端执行
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
需要注意的是用逗号来分割key和参数,高能提醒,注意空格(key和key、key和逗号、逗号和参数、参数和参数之间都要有空格)
./redis-cli –eval [lua脚本] [key…]空格,空格[args…]
比如控制活跃用户
先在redis中设置一个user对象(String类型)
然后执行lua脚本
#$REDIS_HOME/redis-cli --eval /web/project/lua/activeuser.lua user , 1
#this is activeuser.lua
if redis.call("EXISTS",KEYS[1]) == 1 then
return redis.call("INCRBY",KEYS[1],ARGV[1])
else
return nil
end
2、命令执行
命令格式 | 说明 | 对应Jedis客户端Jedis对象的方法之一(有更多重载方法) |
EVAL script numkeys key [key ...] arg [arg ...] | 执行Lua脚本 |
public Object eval(String script, int keyCount, String... params) |
EVALSHA sha1 numkeys key [key ...] arg [arg ...] | 根据给定的 sha1 校验码,对缓存在服务器中的脚本进行求值 | public Object evalsha(String sha1, int keyCount, String... params) |
SCRIPT LOAD script | 将给定的脚本缓存,不执行,并返回sha1校验值 | public String scriptLoad(String script) |
SCRIPT EXISTS sha1 [sha1 ...] | 给定一个或多个脚本的 SHA1 校验和,返回一个包含 0 和 1 的列表,表示校验和所指定的脚本是否已经被保存在缓存当中 | public List<Boolean> scriptExists(String... sha1) |
SCRIPT FLUSH | 清除所有 Lua 脚本缓存 | |
SCRIPT KILL | 杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效(如果已经执行了写操作,则需要通过shutdown nosave命令来处理) |