用过redis或者nginx的应该都知道lua脚本,lua虽然不难但是也需要一定的学习成本。如果你是基于Redis插入Lua脚本,则只需要一些简单的Lua脚本知识,就可以初步的应用lua。通过Lua脚本,我们可以原子性的去处理一些单条redis命令无法完成的一系列操作[1]。
最先需要认识的,就是EVAL命令,通过它,我们可以执行redis的命令。
其命令格式如下[2]:
EVAL luascript numkeys key [key ...] arg [arg ...]
一次分别是EVAL关键字、脚本字符串、key数量、key数组,arg数组(值数组)
示例如下[2]:
127.0.0.1:6379> EVAL "return redis.call('GET',KEYS[1])" 1 hello
"world"
之所以会来写这个文章,是因为在查看redis分布式锁的时候,看到了这段代码[3]:
String checkAndExpireScript = "if redis.call('get', KEYS[1]) == ARGV[1] then " +
"return redis.call('expire',KEYS[1],ARGV[2]) " +
"else " +
"return 0 end";
jedis.eval(checkAndExpireScript, 1, lockKey, lockValue, "30");
理解了上面的EVAL命令,就能够很简单的理解jedis.eval()方法及其参数的意思了。
OK,关于eval的简述就写到这里。有的时候学习就是这样,别想着一下子就全都学会,就需要啥就去学啥,慢慢的很多东西就都能掌握了…
参考文章:
[1],Redis中使用Lua脚本(一)
[2],Redis Lua脚本完全入门
[3],redis系列:基于redis的分布式锁