重複借款問題
解決方案:redis鎖
Talk is cheap,Show me the code 別叨叨,看代碼
生產核心代碼
String creatOrderKey = "Loan:" + loanCreateReqDto.getUserId(); //鎖用戶id
Long currentTime = System.currentTimeMillis();
//userId放入redis false key之前已經存在會返回false,不存在 加鎖成功true(獲取到鎖)
boolean lock = redisTemplate.opsForValue().setIfAbsent(creatOrderKey, currentTime);
try {
if (lock) {//加鎖成功
//校驗各種信息,邏輯處理,生成借款訂單
logger.info("借款:結果:resultDto:{}",JSON.toJSONString(resultDto));
} else {//加鎖失敗
logger.info("任務已在進行中,,稍後再試");
}
} catch (Exception e) {
logger.info("借款異常 ", e);
} finally {
if (lock) {
redisTemplate.delete(creatOrderKey);
logger.info("任務結束,釋放鎖!");
} else {
logger.info("(當前線程)沒有獲取到鎖,無需釋放鎖!");
Long createTime = (Long) redisTemplate.opsForValue().get(creatOrderKey);