如果workder字段的位数留得够多,比如有20位(一百万),那用redis或mysql来自增最简单,每个进程启动时拿一个wokrder id。
如果只留了12位(4096),就要用ZK或etcd,当进程关闭了要回收这个号。
继续拼了,直接拿JDK UUID.randomUUID()的低位long(按UUID规范,高位的long被置了4个默认值的bit,低位只被设置3个bit),或者直接SecureRandom.nextLong(),不浪费了那3个bit。
参考资料:
一乐那篇《业务系统需要什么样的ID生成器》,其中 唯一性,时间相关,粗略有序,可反解,可制造 这个提法很好,说白了就是让大家尽量用UUID version1风格。
小编推荐阅读