redis + lua 语句
get
127.0.0.1:6379> eval "return redis.call('get',KEYS[1])" 1 foo "bar" 127.0.0.1:6379> eval "return redis.call('get','foo')" 0 "bar"
set
127.0.0.1:6379> eval "return redis.call('set',KEYS[1],'bar')" 1 foo OK
get +set
127.0.0.1:6379> eval "if redis.call('get',KEYS[1]) then return 0;else redis.call('set',KEYS[1],ARGV[1]);return 1;end;" 1 lock159 2333 (integer) 1
分布式锁 get +set + expire
redis分布式锁实现,之加锁。如果不存在lock,则设置local为233,并设置过期时间为60,如果返回1表示加锁成功,返回0则加锁失败,该操作是原子操作,可以由等效命令 set lock 233 nx ex 60代替:
eval "if redis.call('get',KEYS[1]) then return 0;else redis.call('set',KEYS[1],ARGV[1]);redis.call('expire',KEYS[1],ARGV[2]);return 1;end;" 1 lock value233 60
释放锁 get + del
edis分布式锁实现,之释放锁。如果不存在lock,则无需释放,如果存在lock并且值和传入的值一致,那么删除lock,释放成功,其他情况返回释放失败。成功:1,失败0。
eval "local v = redis.call('get',KEYS[1]);if v then if v~=ARGV[1] then return 0;end;redis.call('del',KEYS[1]);end;return 1;" 1 lock 233
本文来自博客园,作者:黄橙,转载请注明原文链接:https://www.cnblogs.com/RedOrange/p/17095591.html

浙公网安备 33010602011771号