急!!!唯一ID 时间戳+6位随机数在程序里跑的时候出现key重复

在测试库的数据有100w左右,用的唯一ID 时间戳+6位随机数作为ID来使用的,在跑程序的时候时不时就会报key重复,毫秒容易重复还可以,六位随机数重复的可能是十万分之一,而且我也不可能一毫米就跑十万条数据呀,他为啥就这么容易重复呢。

建议你换一种全局ID的生成方法, 建议使用推特雪花算法的 全局唯一ID

package org.n3r.idworker;

import org.n3r.idworker.strategy.DefaultWorkerIdStrategy;
import org.n3r.idworker.utils.Utils;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class Sid {
    private static WorkerIdStrategy workerIdStrategy;
    private static IdWorker idWorker;

    static {
        configure(DefaultWorkerIdStrategy.instance);
    }


    public static synchronized void configure(WorkerIdStrategy custom) {
        if (workerIdStrategy != null) workerIdStrategy.release();
        workerIdStrategy = custom;
        idWorker = new IdWorker(workerIdStrategy.availableWorkerId()) {
            @Override
            public long getEpoch() {
                return Utils.midnightMillis();
            }
        };
    }

    /**
     * 一天最大毫秒86400000,最大占用27比特
     * 27+10+11=48位 最大值281474976710655(15字),YK0XXHZ827(10字)
     * 6位(YYMMDD)+15位,共21位
     *
     * @return 固定21位数字字符串
     */

    public static String next() {
        long id = idWorker.nextId();
        String yyMMdd = new SimpleDateFormat("yyyyMMdd").format(new Date());
        return yyMMdd + String.format("%014d", id);
    }


    /**
     * 返回固定16位的字母数字混编的字符串。
     */
    public String nextShort() {
        long id = idWorker.nextId();
        String yyMMdd = new SimpleDateFormat("yyyyMMdd").format(new Date());
        return yyMMdd + Utils.padLeft(Utils.encode(id), 10, '0');
    }

//    public static void main(String[] args) {
//		String aa = new Sid().nextShort();
//		String bb = new Sid().next();
//
//		System.out.println(aa);
//		System.out.println(bb);
//	}

    public static void main(String[] args) {
        Sid sid = new Sid();
        System.out.println(sid.nextShort());
    }
}

代码我这边比较多,如果你需要的话,我可以单独发你代码

 

时间戳用单台机器跑都有概率重复,6位数也有概率重复。你这算法不行。可以使用uuid或者雪花算法

这种唯一ID大多都用雪花算法跑吧...用hutool不香吗