不是吧,不是吧,又是一年冬,却还不会雪花算法


写在前面的话:

时间:2021.12.28(可能最近没吃肉,缺营养,身体骨有点差)

地点:陕西西安(居家办公)


人物:冷妆,刚入行的java小菜鸡

事件起因:在哪吒社区得到《亿级流量java高并发与网络编程实战》

事件经过:西安因为疫情居家办公,而我的电脑落在办公区域,大型社4现场

续前文:大型系统架构设计

补上文-->以微服务架构为例的技术选型参考

 引入正题之分布式ID生成器

在分布式系统中,如何在各个不同的服务器产生ID值?

解决方案如下

1.使用数据库自增特性(不同节点直接使用相同数据库的自增Id值)

2.使用UUID算法产生Id值(UUID.randomUUID()获取UUID值(这个在项目中有用过,当时比较懵逼))

3.使用sonwFlake算法产生Id值


SnowFlake--雪花算法

Twitter提出的一种生成id的算法

该算法生成一个64bit的整数,也就是long类型来存储Id值

第一位可以理解为符号位

再往后的41位时间戳,表示2的41次方数字,换算到年除以1000(毫秒)*60(秒)*60(分钟)*24(小时)*365(天)等于69年,作为起始时间2021-12-28 23:05:12.3-2090之间的任一时刻

根据时间戳区分Id值

接下来是10位机器码,通过10位与节点有关的物理信息,对不同节点生成不同的Id值

12位序列号:0.1.2...12递增数字的二进制表达形式

根据机器码和序列号区分Id值

ps:关于雪花算法的源码笔者还得去研究

写在后面的话:

事件结果:现在的时间完全按照自己的规划走下去,所以写下了以上blog

碎碎念:欢迎大家指出blog中的问题,督促笔者进一步改善,你的建议是笔者坚持的动力

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值