命令格式
setnx key value將 key 的值設為 value,當且僅當 key 不存在。
若給定的 key 已經存在,則 setnx 不做任何動作。
setnx 是set if not exists的簡寫。
返回值
設定成功,返回 1 。
設定失敗,返回 0 。
* 使用redis實現分布式全域性鎖
* 演算法實現參考:
*@author shenhaiwen
* */
public
class
redisdistributelock
private string getlockkey()
/*** 丟擲異常或返回-1,說明未獲取到鎖
* return: 返回值需要在unlock時作為引數傳入
*@param timeout -1:永久等待
*@throws exception
*/public
long
lock(long timeout) throws exception
if(setnxret == -1)
//已經有鎖了
string val = redisoper.getvaluebykey(key);
if(stringutils.isblank(val))
if(system.currenttimemillis() > long.parselong(val))
if(system.currenttimemillis() > long.parselong(oldval))}}
if(!infinite)
thread.sleep(100);
return -1;
}/**
* *@param keytimeout lock的返回值
*/public
void
unlock(long keytimeout)
redisoper.deletekeyvalue(getlockkey());
}public string getlockname()
public
long
getexpiretime()
}
詳解使用Redis SETNX 命令實現分布式鎖
使用redis的 setnx 命令可以實現分布式鎖,下文介紹其實現方法。setnx命令簡介 命令格式 setnx key value 將 key 的值設為 value,當且僅當 key 不存在。若給定的 key 已經存在,則 setnx 不做任何動作。setnx 是set if not exists...
Redis SETNX 命令實現分布式鎖
setnx命令簡介 命令格式 setnx key value將 key 的值設為 value,當且僅當 key 不存在。若給定的 key 已經存在,則 setnx 不做任何動作。setnx 是set if not exists的簡寫。返回值返回整數,具體為 1,當 key 的值被設定 0,當 key...
使用Redis SETNX 命令實現分布式鎖
使用redis的 setnx 命令可以實現分布式鎖,下文介紹其實現方法。setnx key value 將 key 的值設為 value,當且僅當 key 不存在。若給定的 key 已經存在,則 setnx 不做任何動作。setnx 是set if not exists的簡寫。返回整數,具體為 1,...