• 參考snowflake算法,基本思路:

  • 序列12位(更格式化的輸出后,性能損耗導(dǎo)致每毫秒生成不了這么多,所以可以考慮減少這里的位,不過(guò)留著也并無(wú)影響)

  • 機(jī)器位10位

  • 毫秒為左移 22位

  • 上述幾個(gè)做或運(yùn)算后得出一個(gè)唯一的數(shù),轉(zhuǎn)10進(jìn)制后,最大10位,最小7位,string.format來(lái)統(tǒng)一為10,format性能影響,導(dǎo)致性能降低3倍左右

FilUtils不想用的話,1太機(jī)器可以直接考慮使用1,多機(jī)器根據(jù)代碼配置id
代碼如下:

package net.gitosc.lianqu1990.utils.code;import net.gitosc.lianqu1990.utils.date.DateFormatUtils;import net.gitosc.lianqu1990.utils.date.TimeMark;import org.apache.commons.io.FileUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;/** * 缺陷是,訂單量沒(méi)那么大,導(dǎo)致機(jī)器碼|序列 后,一般都是4096 * 通過(guò)將毫秒引入序列后修正 * 后來(lái)加了format以后性能受損,比idcenter慢10倍,每秒可以生成50w,idcenter將近500w,不過(guò)這也是idcenter極限 * 夠用,暫不優(yōu)化 * @author hanchao * @date 2017/4/20 19:01 */public class OrderNoCenter {    public static final Logger logger = LoggerFactory.getLogger(OrderNoCenter.class);    private static final String WORKERID_PATH = "/etc/workerId";    private OrderNoCenter() {
    }    private static class OrderNoCenterHolder{        private static OrderNoCenter instance = new OrderNoCenter();
    }    public static OrderNoCenter getInstance() {        return OrderNoCenterHolder.instance;
    }    /**     * 節(jié)點(diǎn) ID 默認(rèn)取1&