其他操作:
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...