Như những người khác đã viết, dài không có đủ không gian cho một số duy nhất. Nhưng trong nhiều trường hợp, một số có thể là duy nhất đủ để sử dụng cụ thể. Ví dụ: Dấu thời gian với độ chính xác nano giây thường đủ tốt. Để có được nó, thay đổi mili giây hiện tại 20 bit còn lại để phân bổ không gian cho nano giây và sau đó che phủ nó bằng nano giây:
(System.currentTimeMillis() << 20) | (System.nanoTime() & ~9223372036854251520L);
Các nano & ~ 9223372036854251520L phần lấy nano giây hiện tại và thiết lập 44 byte đầu tiên 0, chỉ để lại 20 bit ngay mà đại diện nano giây đến một phần nghìn giây (999999 nanos) Nó cũng giống như:
nanoseconds & ~1111111111111111111111111111111111111111111100000000000000000000
Side lưu ý: nano giây không nên được sử dụng để đại diện cho hiện tại thời gian vì điểm khởi đầu của chúng không cố định theo thời gian và vì chúng được tái chế khi chúng đạt tới mức tối đa.
Bạn có thể sử dụng bất kỳ thao tác bit nào khác. Nó thường là tốt để đưa vào tài khoản thời gian hiện tại và cái gì khác như id thread hiện tại, id quá trình, ip.
Nguồn
2016-05-19 15:57:19
Tại sao bạn không sử dụng trình tự? Bạn có thể sử dụng những thứ như thế không? Hoặc UUID đây là một giải pháp mà bạn phải sử dụng? –
bạn có thể giải thích thêm về chuỗi số –
Bạn sử dụng DB nào? Bạn sử dụng khung công tác db nào (JDBC, Hibernate, myBatis)? – Taky