Talk is cheap,Show me the code 別叨叨,給我展示代碼
生產核心代碼如下:
private Lock lock1 = new ReentrantLock();//重入鎖
/**
* 獲取用戶id
*
* @return
*/
@PostMapping("/getUserId")
public ResponseDto getUserId(@RequestBody RequestDto request) {
log.info("getUserId: " + JSON.toJSONString(request));
ResponseDto response = ValidationUtils.validateEntity(request);
if (null != response) {
return response;
}
String data = null;
try {
if (lock1.tryLock(5, TimeUnit.SECONDS)) {
boolean b = false;
while (!b) {
String random = getRandomNumber();
b = redisTemplate.opsForValue().setIfAbsent(random, random);//隨機數放入redis
if (b) {//不重複
data = request.getPlatform() + random + userKey;
break;
}
}
response = ResponseDto.success(data);
}
} catch (Exception e) {
response = ResponseDto.error();
log.error(e.getMessage(), e);
} finally {
lock1.unlock();
}
log.info("setUserId: " + JSON.toJSONString(response));
return response;
}
/***
* 獲取隨機數
* @return
*/
private String getRandomNumber() {
String str = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
int intFlag = (int) (Math.random() * 100000);
str = str + intFlag;
return str;
}