Spring-AOP防重解決方案

思路以下:redis

一、自定義註解 @NoRepeatSubmit 標記有必要防重複提交請求Controller。併發

二、經過Spring-AOP方式對全部標記了 @NoRepeatSubmit 的方法進行切入攔截。分佈式

防重複提交解決方案!史上最全原理解析!

 

三、在業務方法執行前,獲取當前用戶的 token+ 當前請求地址,做爲一個惟一 KEY,去獲取 Redis 分佈式鎖(若是此時併發獲取,只有一個線程會被成功獲取到鎖)。測試

防重複提交解決方案!史上最全原理解析!

 

四、業務方法執行後,必定要釋放鎖,異常也要釋放鎖(放到finally中釋放亦可)。線程

防重複提交解決方案!史上最全原理解析!

 

經過上面測試,咱們看到初始化十個線程,只有一個線程是提交成功了。blog

若是是分佈式項目能夠使用基於redis的分佈式鎖,token

若是是單機項目能夠使用AtomicInteger或者更高效的併發計數器LongAdder實現單機鎖.it

相關文章
相關標籤/搜索