簡單發號器demo

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章