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

 

 
posted @ 2023-02-17 08:38  黄橙  阅读(45)  评论(0)    收藏  举报