簡單適用基於redis的分布式鎖

2021-09-29 21:29:48 字數 1238 閱讀 6744

public class lock ")

private long lockttl;

@value("$")

private long lockwait;

public lock(stringredistemplate stringredistemplate)

public boolean lockwait(string lockkey)

public boolean lockwait(string lockkey, long lockwaitmillsec) , {}", lockkey, lockwaitmillsec);

long start = system.currenttimemillis();

while(!lock(lockkey)) 超時{}", lockkey, lockwaitmillsec);

return false;

}thread.sleep(100);

} catch (interruptedexception e)

}log.info("成功獲取到鎖{}", lockkey);

return true;

}boolean lock(string key)

boolean lock(string key, long lockttlmillsec) else :{} => {}", lockkey, expiredtimeoldvalue, expireat);

threadlocal.set(expireat);

return true;}}

}}

return acquired;

}public void unlock(string key) ", key);

// 可能在未獲取到鎖的情況下呼叫

if(threadlocal.get() == null)

string lockkey = lockkey(key);

object expiredtimeat = stringredistemplate.opsforvalue().get(lockkey);

if(expiredtimeat != null)

}threadlocal.remove();

}string lockkey(string key)

}

工具基於spring框架的stringredistemplate,需要spring框架支援,當然也可以自己基於其它方式實現redis操作

基於redis分布式鎖的簡單實現

步驟 引入依賴 springboot整合redis org.springframework.boot groupid spring boot starter data redis artifactid dependency 加鎖以及 解鎖工具類 package com.hzrys.atplatfor...

基於redis的分布式鎖

public class redislock 加鎖 取到鎖加鎖,並返回值用於解鎖 取不到鎖則立即返回 1 param millitimeout 最長鎖定時間,超時後自動刪除鎖,避免死鎖 return public synchronized long lock long millitimeout lo...

基於twemproxy的redis分布式應用

根據以往的測試結論,單個redis的例項的記憶體總量最好控制在8g以內 最大不能超過20g 而實際上應用對redis的記憶體的需求可能會遠遠大於8g,因此需要乙個保持redis server效能不下降,但可以有效擴充redis server的容量的方案。twemproxy是乙個恰當的選擇。b 簡介 ...