snowflake 太长了。。。
1
mayx 2019-09-27 19:17:07 +08:00 via Android
节点号+随机数
|
2
iPhoneXI 2019-09-27 19:22:03 +08:00 via Android
号段模式
|
3
Raymon111111 2019-09-27 19:27:43 +08:00
机器自己注册一个 id (用数据库主键是最简单的), 启动的时候放在本地.
然后 时间(unixtime 秒级别) + id + 几位随机数(比如三位 000 - 999) 就可以弄出十几位的不重复数 机器生成的时候把单秒生成的数存在本地(注意做好多线程控制), 保证自己一秒内不生成重复的(重复后重来一个即可) 风险点有这么几个, 结合自身的业务, 一般下面的限制点都不会成为问题 1. 机器的 id 位数是固定的, 比如也是限制 3 位, 那么这就不支持超过 1000 台机器同时干这么事, 总之一开始设置的机器 id 位数不能改变 2. 一秒内单台机器生成的 id 不能特别多 (虽然上限是 1000, 但是太多之后冲突多了也影响效率) 3. 并不是严格自增的 |
4
alpha2016 2019-09-27 19:31:39 +08:00
|
5
oneisall8955 2019-09-27 19:53:30 +08:00 via Android
美团团队在雪花算法里面做了优化,没用过,希望有帮助
|
6
WordTian 2019-09-27 20:03:22 +08:00 via Android
时间 一,节点码,自增序号
|
7
jaylee4869 OP public class RandomIDUtils {
private static final long LIMIT = 1000000000L; private static long last = 0; // 集群环境下修改此 workerId(1,2,3 依次递增) private static final long workerId = 1; /** * 生成 10 位不重复数字, 首位为 workerId * 线程安全 * 单调递增 */ public static long getID() { long id = System.currentTimeMillis() % LIMIT; if (id <= last) { id = (last + 1) % LIMIT; } return (last = id) + workerId * LIMIT; } } |
8
lxk11153 2019-10-18 00:17:34 +08:00
Leaf——美团点评分布式 ID 生成系统
ht 河蟹 tps://tech.meituan.c 河蟹 om/2017/04/21/mt-leaf.html) 美团点评分布式 ID 生成系统中 Leaf-segment 数据库方案的实现 ht 河蟹 tps://github.c 河蟹 om/zhuzhong/idleaf |