redisTemplate實現分布式鎖

2021-10-13 05:28:05 字數 1134 閱讀 4876

其他操作:

setnx 和expire分開實現上鎖和超時的話存在問題,如果加鎖後設定超時**未執行時,服務掛掉,將會死鎖

解鎖時使用getset判斷之後再刪除key,可能存在在getset之後,此時鎖超時被其他人占有,再刪就把別人的鎖刪了。

參考各大神部落格,超時時間的設定延時使用守護執行緒,還沒搞,有空搞搞

private static final string releasekeyscript = "if redis.call('get', keys[1]) == ar**[1] then return redis.call('del', keys[1]) else return 0 end";

private static final long release_lock_result_success = 1l;

/** @description

* 不存在則set, 存在則不設定 單位秒

* @author lixinyu

* @date 2020/12/27 20:38

**/public boolean trydistributedlock(string lockkey, string lockvalue, long time)

} catch (throwable e)

return false;}/*

* @description

* 使用lua指令碼釋放分布式鎖

* @author lixinyu

* @date 2020/12/27 21:42

**/public boolean releasedistributedlock(string lockkey, string lockvalue)

測試**:

}參考部落格:  裡邊實現是jedis的

RedisTemplate 實現通用限流器

乙個安全的介面限流肯定少不了,登入尤其如此。比如驗證碼傳送,驗證碼驗證試錯,密碼登入試錯,這些雖然是不同的業務,但是目的都是乙個就是,對於某些使用者的某種行為在一段時間內的的允許次數進行限制 對於此我們抽象出來四個東西 接下來我們借助redis來實現這功能 redis中有一種資料型別 zset 簡單...

RedisTemplate實現分布式鎖

component public class redisdistributedlockutils private static redistemplateredistemplate autowired public void setredistemplate redistemplate redist...

RedisTemplate操作Redis常用

redistemplate中定義了對5種資料結構操作 redistemplate.opsforvalue 操作字串 redistemplate.opsforhash 操作hash redistemplate.opsforlist 操作list redistemplate.opsforset 操作se...