reids使用lua实现setnx+expire的效果

最近在做spring cloud微服务架构,有些业务用到了分布式锁,于是了解到redis的setnx可以实现分布式锁,但是我考虑到死锁的问题,就考虑加上过期时间,但是setnx不支持同时设置过期时间,于是lua上场了。

local result = redis.call('setnx',KEYS[1],KEYS[2]);
if result == 1 then
    redis.call('expire',KEYS[1],KEYS[3]);
end;
return result;

redis eval传送门

评论