Redisson註解式分布式鎖

2021-10-07 00:03:39 字數 1471 閱讀 5964

一、說明

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