当前位置: 首页 > news >正文

外贸企业网站上传网站源码

外贸企业网站,上传网站源码,中山网站推广服务,西瓜创客少儿编程官网Snowflake产生的ID由 64 bit 的二进制数字组成,被分成了4个部分,每一部分存储的数据都有特定的含义: 第 0 位: 符号位(标识正负),始终为 0;第 1~41 位 :一共 41 位&…

Snowflake产生的ID由 64 bit 的二进制数字组成,被分成了4个部分,每一部分存储的数据都有特定的含义:

  • 第 0 位: 符号位(标识正负),始终为 0;
  • 第 1~41 位 :一共 41 位,用来表示时间戳,单位是毫秒,可以支撑2 ^41 毫秒(约 69 年)2^41/1000*60*60*24*365 = 69年
  • 第 42~52 位 :一共 10 位,工作机器id,一般用前 5 位表示机房ID,后 5 位表示机器ID,用于区分不同集群/机房的节点,10位的长度,可以表示1024个不同节点。
  • 第 53~64 位 :一共 12 位,用来表示序列号。 序列号为自增值,代表单台机器每毫秒能够产生的最大ID 数(2^12 = 4096),也就是说单台机器每毫秒最多可以生成 4096 个 唯一 ID,最大可以支持400w左右的并发量。
/*** 雪花算法* @author CC* @version 1.0* @since2023/10/24*/
public class SnowFlake {// 机房(数据中心)IDprivate long datacenterId;// 机器IDprivate long workerId;// 同一时间的序列号private long sequence;// 开始时间戳private long twepoch = 1634393012000L;// 机房ID所占的位数: 5个bitprivate long datacenterIdBits = 5L;// 机器ID所占的位数:5个bitprivate long workerIdBits = 5L;// 最大机器ID:5bit最多只能有31个数字,就是说机器id最多只能是32以内// 最大:11111(2进制) --> 31(10进制)private long maxWorkerId = -1L ^ (-1L << workerIdBits);// 最大机房ID:5bit最多只能有31个数字,机房id最多只能是32以内// 最大:11111(2进制)--> 31(10进制)private long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);// 同一时间的序列所占的位数:12个bit// 最大111111111111 = 4095  代表同一毫秒最多生成4096个private long sequenceBits = 12L;// workerId的偏移量12private long workerIdShift = sequenceBits;// datacenterId的偏移量12+5private long datacenterIdShift = sequenceBits + workerIdBits;// timestampLeft的偏移量12+5+5private long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;// 序列号掩码 4095 (0b111111111111=0xfff=4095)// 用于序号的与运算,保证序号最大值在0-4095之间private long sequenceMask = -1L ^ (-1L << sequenceBits);// 最近一次时间戳private long lastTimestamp = -1L;// 按照机器ID和机房ID创建雪花算法对象public SnowFlake(long workerId, long datacenterId) {this(workerId, datacenterId, 0);}public SnowFlake(long workerId, long datacenterId, long sequence) {// 合法判断if (workerId > maxWorkerId || workerId < 0) {throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));}if (datacenterId > maxDatacenterId || datacenterId < 0) {throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));}System.out.printf("worker starting. timestamp left shift %d, datacenter id bits %d, worker id bits %d, sequence bits %d, workerid %d",timestampLeftShift, datacenterIdBits, workerIdBits, sequenceBits, workerId);this.workerId = workerId;this.datacenterId = datacenterId;this.sequence = sequence;}// 获取下一个随机的IDpublic synchronized long nextId() {// 获取当前时间戳,单位毫秒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));}// 同一毫秒并发if (lastTimestamp == timestamp) {// 同一毫秒(时间戳)内进行序列号递增sequence = (sequence + 1) & sequenceMask;// sequence序列大于4095,导致溢出if (sequence == 0) {// 调用到下一个时间戳的方法timestamp = tilNextMillis(lastTimestamp);}} else {// 如果是当前时间的第一次获取,那么就置为0sequence = 0;}// 记录上一次的时间戳lastTimestamp = timestamp;// 偏移计算return ((timestamp - twepoch) << timestampLeftShift) |(datacenterId << datacenterIdShift) |(workerId << workerIdShift) |sequence;
}// 计算时间戳private long tilNextMillis(long lastTimestamp) {// 获取最新时间戳long timestamp = timeGen();// 如果发现最新的时间戳小于或者等于序列号已经超4095的那个时间戳while (timestamp <= lastTimestamp) {// 不符合则继续timestamp = timeGen();}return timestamp;}// 获取当前时间戳private long timeGen() {return System.currentTimeMillis();}public static void main(String[] args) {SnowFlake worker = new SnowFlake(1, 1);for (int i = 0; i < 100; i++) {System.out.println(worker.nextId());}System.out.println();worker = new SnowFlake(1, 2);for (int i = 0; i < 100; i++) {System.out.println(worker.nextId());}}
}

 

http://www.yayakq.cn/news/246053/

相关文章:

  • 网站更新seo巴彦淖尔专业做网站的
  • 机械设备网站长沙网站建设工作室
  • 服装网站建设项目规划网址大全在线免费观看
  • 模块化网站开发wordpress数据库导出工具
  • 东莞网站建制作如何做影视剧网站
  • 创建网站英语wordpress图片墙插件
  • pta编程网站网站建设网站备案所需资料
  • 上线后wordpress后台无法登陆网络优化工程师为什么都说坑人
  • 网站 文本编辑器哈尔滨网站推广服务
  • 自考网站建设与管理自媒体有哪些平台
  • 做书籍的网站友情链接检测工具
  • 婚纱网站设计代码html手机h5网站模板下载
  • 净水设备 技术支持 东莞网站建设莱芜在线话题苏春媛
  • 番禺手机网站制作推广网站模板上传到那个目录
  • 高邑网站建设企业网站强制备案
  • 网站建设公司潍坊wordpress 404.php
  • wordpress绑定二级域名插件seo网络优化公司哪家好
  • 无锡高端网站建设咨询厦门小程序开发公司排名
  • 阳江营销网站开发中山专业网站建设公司
  • 专门设计网站的公司叫什么专业做外贸网站的公司
  • 德阳建设银行招聘网站网站建设项目的预算
  • 旌阳区黄河开发建设网站wordpress激活码充值
  • 网站做等级保护国外做的比较好的网站有哪些
  • 福建建设厅网站官网东莞seo建站投放
  • 商业网站策划书范文百度正版下载
  • 成都建设银行网站做网站的软件叫什么软件
  • 网站可以有二维码吗北京vi设计公司有哪些
  • 有没有免费做编辑网站管理系统做文字图片的网站
  • 为企业规划一个网站上海注册公司注册资金
  • 国内外优秀设计网站wordpress建站网