- 构建锁
参数解释:
key:键
value:值
nx:如果当前key存在,则set失败,否则成功
ex:设置key的过期时间
expireTime:key的过期时间,时间到了,Redis会自动删除key和value。
这个命令,将上面的错误例子2中的两个操作合为一个原子操作,保证了同时成功或同时失败。
public static boolean getDistributedLock(Jedis jedis, String lockKey, String requestId, int expireTime) {
String result = jedis.set(lockKey, requestId, "NX", "EX", expireTime);
if (LOCK_SUCCESS.equals(result)) {
return true;
}
return false;
}
- 释放锁
public static boolean releaseDistributedLock(Jedis jedis, String lockKey, String requestId) {
String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
Object result = jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));
if (RELEASE_SUCCESS.equals(result)) {
return true;
}
return false;
}
原文地址:https://zhuanlan.zhihu.com/p/107695840
Redis命令文档:http://redisdoc.com/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73835.html