一、說明
1.測試環境:springboot 2.0.9.release版本+jdk1.8+redis集群
2.安裝redis的教程:redis學習總結(一)單機集群搭建
boolean excute = !ratelimited || rlock.getholdcount() == 1;
if (excute)]", key);
obj = joinpoint.proceed();
} else
4.使用例子:
@redissonlock 鎖整個方法
@redissonlock(lockindexs = 0, ratelimited = true) 鎖第乙個引數, 並限速
@redissonlock(lockindexs = , ratelimited = true) 鎖第乙個引數和第二個引數組合, 並限速
@redissonlock(lockindexs = ) 鎖第二個引數和第三個引數組合
@redissonlock(lockindexs = 0,fieldnames = "transid") 鎖第乙個引數屬性等於transid
@redissonlock(lockindexs = ,fieldnames = ) 鎖第乙個引數屬性等於transid和第二個引數屬性等於id的組合
5.原始碼路徑:
注:在專案【zjmzxfxhl】基礎上改造公升級完成,同時推薦關注該專案!
二、使用場景
/**
* 使用場景一:大併發訪問減小介面壓力
* 使用者獲得鎖的條件是,上乙個執行緒執行結束 或 鎖自動釋放時刻在其等待時間內
* 注意:沒獲取到鎖的使用者快速失敗,體驗可能不好
* @return 壓測結果:併發5請求,只有乙個獲取到鎖,其他請求發現鎖被占用5秒後才釋放,直接返回
*/@redissonlock(waittime = 1, leasetime = 5, msg = "活動太火爆")
public object gettoken1() catch (interruptedexception e)
return "juwenzhe123321juwenzhe";
}/**
* 使用場景二:將第乙個引數物件的userid作為鎖key,並限速,適用於介面防刷場景
* @return 壓測結果:5秒100請求,每個不同的使用者只有乙個請求成功
*/@redissonlock(ratelimited = true, waittime = 0, leasetime = 5, lockindexs = , fieldnames = , msg = "獲取token過於頻繁")
public object gettoken2(@requestbody user user)
1.分布式鎖:
2.redisson實現分布式鎖(1)---原理
redisson分布式鎖
介面做冪等的方式很多,我們應用使用分布式鎖 插入明細來做冪等。但是發現冪等失效了,最終確認是業務執行尚未結束,還沒有插入明細。但是客戶端第二個訪問就來到了,此時呢,分布式鎖的時間也失效了。也就是兩個問題 1是業務執行為什麼很慢,這個就有很多種情況暫不考慮。考慮第二種情況,能不能加長分布式鎖的時間。由...
分布式鎖 redisson
1 匯入依賴 org.redissongroupid redissonartifactid 3.11.1version dependency 2 配置redisson configuration public class redissonconfig spring name cjs redisson...
redis分布式鎖redisson
原文 關於redisson的源 請參考官網 redisson官方講解參考 wiki e7 9b ae e5 bd 95 首先需要引入redisson org.springframework.bootgroupid spring boot starter data redisartifactid de...