/** * 占用鎖,并設置唯一鎖id * @param lockKey 鎖key * @return 鎖id */public String lock(String lockKey, Integer timeout) { //獲得jedis實例 Jedis jedis = redisUtil.getJedis(); //鎖id(必須擁有此id才能釋放鎖) Strin
/**
* 占用鎖,并設置唯一鎖id
* @param lockKey 鎖key
* @return 鎖id
*/
public String lock(String lockKey, Integer timeout) {
//獲得jedis實例
Jedis jedis = redisUtil.getJedis();
//鎖id(必須擁有此id才能釋放鎖)
String lockId = UUID.randomUUID().toString();
//占用鎖同時設置失效時間 px:過期時間單位為毫秒 EX:過期時間為秒
String isSuccees = jedis.set(lockKey, lockId, "NX","PX", timeout);
//占用鎖成功返回鎖id,否則返回null
if("OK".equals(isSuccees)){
return lockId;
}else{
return null;
}
}
/**
* 釋放鎖擁有唯一鎖id
* @param lockKey 鎖key
* @param lockId 加鎖id
*/
public void unlock(String lockKey,String lockId) {
if(lockId != null){
//獲得jedis實例
Jedis jedis = redisUtil.getJedis();
//執行Lua代碼刪除lockId匹配的鎖
String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(lockId));
}
}
看上去好像沒什么問題。
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。