雪花算法时钟回拨
所属分类 architecture
浏览量 117
Twitter Snowflake 算法
64bit大小整数
最高位 符号为 1为负 0为正 一般为0 正数
41位 时间戳(毫秒)
10位 工作机器id datacenterId + workerId
12位 序列号 (2^12 4096 每毫秒可产生 4096个ID)
时间回拨问题
服务器时间突然倒退到之前的时间
人为修改系统时间
时间不同步,同步时可能会出现时间回拨问题
可能生成重复的ID
// 获取当前时间戳,单位毫秒
long timestamp = timeGen();
if (timestamp < lastTimestamp) {
System.err.printf("clock is moving backwards. Rejecting requests until %d.", lastTimestamp);
throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds",
lastTimestamp - timestamp));
}
生成id的几种方式
UUID 无序,基本不会重复
数据库自增主键
redis的INCR和INCEBY
雪花算法生成id
hutool
Snowflake snowflake = IdUtil.createSnowflake(workerId, datacenterId);
long id = snowflake.nextId();
百度 UIDGenerator
美团Leaf
leaf-segment 方案
leaf-snowflake 方案
使用Zookeeper持久顺序节点的特性自动对snowflake节点配置workerID
yitter
上一篇
下一篇
LambdaQueryWrapper 结合 QueryWrapper 实现 sum distinct
Mybatis-Plus update-strategy
雪花算法重复概率
Kafka Exporter 指标
小学奥数七大知识模块体系
小学奥数七大模块