首页  

雪花算法时钟回拨     所属分类 architecture 浏览量 110
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 指标

小学奥数七大知识模块体系

小学奥数七大模块