參考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&