Redis SETNX命令實現分布式鎖

2021-07-31 04:20:51 字數 1299 閱讀 9096

命令格式

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,...