分布式ID生成器
- 使用UUID:缺点:太长,且没有顺序。
- 使用Redis:缺点:Redis压力大,以及额外网络开销。
- 使用分布式ID生成器:是由程序来生成唯一的主键的值。(本文使用)
snowflake(雪花)算法
public class IdWorker {
private final static long TWEPOCH = 1288834974657L;
private final static long WORKER_ID_BITS = 5L;
private final static long DATACENTER_ID_BITS = 5L;
private final static long MAX_WORKER_ID = -1L ^ (-1L << WORKER_ID_BITS);
private final static long MAX_DATACENTER_ID = -1L ^ (-1L << DATACENTER_ID_BITS);
private final static long SEQUENCE_BITS = 12L;
private final static long WORKER_ID_SHIFT = SEQUENCE_BITS;
private final static long DATACENTER_ID_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS;
private final static long TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATACENTER_ID_BITS;
private final static long SEQUENCE_MASK = -1L ^ (-1