java如何获取长如UID
java How to get a long as UID
我有创建弹性搜索文档的方法。它使用 OpenStreetMap 对象 ID 作为 ES 文档 ID。我现在还想添加其他没有 OSM id 的文档。
我不能使用 UUID 生成器,因为该方法需要很长时间。
获取 "pseudo" 长类型 UUID 的最佳方法是什么?
下面的怎么样:
import org.apache.commons.lang3.RandomStringUtils;
public class RandomLong {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
long id = Long.parseLong(RandomStringUtils.randomNumeric(18));
System.out.println("id = " + id);
}
}
它确保正多头,非常适合 ID。
这是另一个答案,它通过使用纳米时间和原子计数器更加强调唯一性。
import java.util.concurrent.atomic.AtomicInteger;
public class UniqueLong {
static AtomicInteger atom = new AtomicInteger(0);
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
long id = Long.parseLong(System.nanoTime() + "" + (atom.getAndIncrement() % 1_000));
System.out.println("id = " + id);
}
}
您可以实现生成 64 位随机序列的长 UID,即使用 AtomicLong()。
AtomicLong is a long value that may be updated atomically. An
AtomicLong is used in applications such as atomically incremented
sequence numbers
private static final AtomicLong TS = new AtomicLong();
public static long getUniqueTimestamp() {
return TS.incrementAndGet();
}
每次调用 getUniqueTimestamp() returns 进程的唯一 ID,从 0 开始。
您可以从更高的值开始,用当前时间初始化 Atomic:
private static final AtomicLong TS = new AtomicLong(System.currentTimeMillis() * 1000);
备注
这不是通用 UID,只是一个 UID!
我有创建弹性搜索文档的方法。它使用 OpenStreetMap 对象 ID 作为 ES 文档 ID。我现在还想添加其他没有 OSM id 的文档。
我不能使用 UUID 生成器,因为该方法需要很长时间。
获取 "pseudo" 长类型 UUID 的最佳方法是什么?
下面的怎么样:
import org.apache.commons.lang3.RandomStringUtils;
public class RandomLong {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
long id = Long.parseLong(RandomStringUtils.randomNumeric(18));
System.out.println("id = " + id);
}
}
它确保正多头,非常适合 ID。
这是另一个答案,它通过使用纳米时间和原子计数器更加强调唯一性。
import java.util.concurrent.atomic.AtomicInteger;
public class UniqueLong {
static AtomicInteger atom = new AtomicInteger(0);
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
long id = Long.parseLong(System.nanoTime() + "" + (atom.getAndIncrement() % 1_000));
System.out.println("id = " + id);
}
}
您可以实现生成 64 位随机序列的长 UID,即使用 AtomicLong()。
AtomicLong is a long value that may be updated atomically. An AtomicLong is used in applications such as atomically incremented sequence numbers
private static final AtomicLong TS = new AtomicLong();
public static long getUniqueTimestamp() {
return TS.incrementAndGet();
}
每次调用 getUniqueTimestamp() returns 进程的唯一 ID,从 0 开始。
您可以从更高的值开始,用当前时间初始化 Atomic:
private static final AtomicLong TS = new AtomicLong(System.currentTimeMillis() * 1000);
备注
这不是通用 UID,只是一个 UID!