Tôi cần tạo một ID gồm 10 chữ số duy nhất trong Java. Đây là những hạn chế đối với ID này:Java: ID có 10 chữ số duy nhất
- Chỉ Số
- tối đa 10 chữ số
- Có thể tạo tối đa 10 ID khác nhau cho mỗi thứ hai
- Có phải là duy nhất (ngay cả khi ứng dụng lại bắt đầu)
- Không thể lưu một số trong cơ sở dữ liệu
- càng nhanh càng tốt KHÔNG để thêm nhiều lattency với hệ thống
Giải pháp tốt nhất mà tôi tìm thấy cho đến nay như sau:
private static int inc = 0;
private static long getId(){
long id = Long.parseLong(String.valueOf(System.currentTimeMillis())
.substring(1,10)
.concat(String.valueOf(inc)));
inc = (inc+1)%10;
return id;
}
Giải pháp này có những vấn đề sau đây:
- Nếu vì lý do nào đó có nhu cầu để tạo ra hơn 10 ID mỗi seccond , giải pháp này sẽ không hoạt động.
- Trong khoảng 32 năm ID này có thể được lặp đi lặp lại (Đây có lẽ là chấp nhận được)
Bất kỳ giải pháp khác để tạo ra ID này?
Bất kỳ vấn đề nào khác mà tôi chưa từng nghĩ đến với tôi?
Cảm ơn sự giúp đỡ của bạn,
Có thể có nhiều trường hợp ứng dụng chạy cùng một lúc không? – assylias
Chỉ một phiên bản đang chạy ngay bây giờ, nhưng có thể có trong tương lai. Chúng tôi cũng có một ví dụ seccondary trong trường hợp chính đi xuống, nhưng chỉ có một trong số họ (chính hoặc seccondary) sẽ chạy cùng một lúc. – magodiez
Như đã chỉ ra trong một số câu trả lời dưới đây, việc triển khai của tôi sẽ thất bại trong môi trường đa môi trường hoặc đa luồng, vì vậy hãy giả định rằng một cá thể đơn lẻ với một chuỗi đơn lẻ sẽ chạy. – magodiez