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

成都高端网站设计seo科技网

成都高端网站设计,seo科技网,东莞房价走势图,设计制作实践活动有哪些这里讲一个比较常用的分布式防重复的ID生成策略,雪花算法 一个用户体量比较大的分布式系统必然伴随着分表分库,分机房部署,单体的部署方式肯定是承载不了这么大的体量。 雪花算法的结构说明 如下图所示: 雪花算法组成 从上图我们可以看…

这里讲一个比较常用的分布式防重复的ID生成策略,雪花算法

一个用户体量比较大的分布式系统必然伴随着分表分库,分机房部署,单体的部署方式肯定是承载不了这么大的体量。

雪花算法的结构说明

如下图所示:
在这里插入图片描述

雪花算法组成

从上图我们可以看出来雪花算法是64bit位的long类型的数值型的id。其中由4部分组成。

1bit为固定为0,表明生成的id为正数。

41bit位毫秒级的时间戳(可保留69年的时间戳)

标识位为10位,由5位的机器id和5位的服务id组成。5bit位能标识32个数值,32*32=1024 共能表示1024个数值,也就是说我们部署的服务可以水平扩展至1024个实例部署。在国内的应用中基本上是够用了。

12位的序列号位,表示同一个实例在1毫秒内能生成4096个序列,基本上也是够用了。

如果按照水平扩展应用还不能够承载我们的体量,我们可以对上面的组成进行改造。比如我们一个应用实例不会在1毫秒生成4096个数值,我们可以把时间戳的值改成35位,把6个bit均分到机器id和服务id上,也就是说我们可以部署256*256=65536个实例。

雪花算法的具体实现代码如下:

/*** 雪花算法工具类* 64位long类型的= 第一位0表示为正数 + 1到41的时间戳 + 5位的数据中心id + 5位的机器id + 12位的序列号* @author yusong* @20241111*/
public class SnowflakeIdWorkerUtil {//开始时间戳 2025-01-01=1735660800000Lprivate final long startTime = 1731400000000L;//数据中心所占雪花算法数据的位数private final long datacenterIdBits = 5L;//机器号所占雪花算法的位数private final long workerIdBits = 5L;
//    //支持最大的数据中心 结果为31
//    private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);
//    //支持最大的机器编号 结果为31
//    private final long maxWorkerId = -1L ^ (-1L << workerIdBits);//同一时间戳生成的序列号所占位数private final long sequenceBits = 12L;//机器号左移位数=序列号的位数 = 12private final long workerIdShift = sequenceBits;//数据中心左移位数= 序列号的位数 + 机器号的位数 = 17private final long datacenterIdShift = sequenceBits + workerIdBits;//时间戳左移位数= 序列号的位数 + 机器号的位数 + 数据中心位数 = 22private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;//生成序列号的最大数=4095private final long sequenceMask = -1L ^ (-1L << sequenceBits);//数据中心编号private long datacenterId;//机器号private long workerId;//毫秒内序列从0开始private long sequence = 0L;//上次生成ID的时间截private long lastTimestamp = -1L;private static SnowflakeIdWorkerUtil sw = null;/**** @param datacenterId 数据中心编号id* @param workerId           机器编号id* @return*/public static synchronized SnowflakeIdWorkerUtil getSnowflakeId(long datacenterId,long workerId) {if(datacenterId>31||datacenterId<0) {throw new RuntimeException("datacenterId必须是0到31位的整数");}if(workerId>31||workerId<0) {throw new RuntimeException("workerId必须是0到31位的整数");}if(sw==null) {sw = new SnowflakeIdWorkerUtil();sw.datacenterId = datacenterId;sw.workerId = workerId;}return sw;}/*** 私有的构造函数 防止外部new*/private SnowflakeIdWorkerUtil() {}/*** 获取下一个id* @return*/public synchronized long nextId() {long timestamp = timeGen();//如果当前时间戳小于上次的时间戳 说明系统时钟回退过 应该抛出异常if(timestamp<this.lastTimestamp) {throw new RuntimeException("系统时钟回退异常,请检查系统设置");}//如果是同一时间戳生成id,则进行毫秒内序列if(this.lastTimestamp==timestamp) {sequence = (sequence + 1) & sequenceMask;//同一毫秒内序列溢出 则等待下一秒if(sequence==0) {timestamp = nextMillis(lastTimestamp);}}else {sequence = 0L;}this.lastTimestamp = timestamp;return ((timestamp - startTime)<<timestampLeftShift)|(datacenterId<<datacenterIdShift)|(workerId<<workerIdShift)|sequence;}/*** 阻塞到下一毫秒,直到获取到新的时间戳* @param lastTimestamp* @return*/private long nextMillis(long lastTimestamp) {long timestamp = timeGen();while (timestamp <= lastTimestamp) {timestamp = timeGen();}return timestamp;}/*** 获取当前的时间戳* @return*/private long timeGen() {return System.currentTimeMillis();}public static void main(String[] args) {for(int i=0;i<100;i++) {SnowflakeIdWorkerUtil swu = SnowflakeIdWorkerUtil.getSnowflakeId(0, 0);long id = swu.nextId();System.out.println(Long.toBinaryString(id));System.out.println(id);}}}

雪花算法有个问题就是不能进行时钟回拨,如果进行时钟回拨就会生成重复的id。如果我们考虑以上问题可以在我们的程序中保留最近一次的生成时间,并拿来做校验,就可解决这个问题。办法总比问题多。


文章转载自:
http://retainer.jpkk.cn
http://negate.jpkk.cn
http://griseofulvin.jpkk.cn
http://suspirious.jpkk.cn
http://recuperator.jpkk.cn
http://fcia.jpkk.cn
http://walking.jpkk.cn
http://roul.jpkk.cn
http://increaser.jpkk.cn
http://touchdown.jpkk.cn
http://dustcoat.jpkk.cn
http://harsh.jpkk.cn
http://armrest.jpkk.cn
http://kelpy.jpkk.cn
http://calcific.jpkk.cn
http://millifarad.jpkk.cn
http://genappe.jpkk.cn
http://eurypterid.jpkk.cn
http://moutan.jpkk.cn
http://lagger.jpkk.cn
http://creodont.jpkk.cn
http://gunsmith.jpkk.cn
http://bozzetto.jpkk.cn
http://musician.jpkk.cn
http://redrape.jpkk.cn
http://ectypal.jpkk.cn
http://southmost.jpkk.cn
http://nickelize.jpkk.cn
http://astyanax.jpkk.cn
http://tumblerful.jpkk.cn
http://thankye.jpkk.cn
http://cosmodrome.jpkk.cn
http://sellout.jpkk.cn
http://satellize.jpkk.cn
http://polyol.jpkk.cn
http://dubiety.jpkk.cn
http://isohel.jpkk.cn
http://bedclothes.jpkk.cn
http://antagonise.jpkk.cn
http://countdown.jpkk.cn
http://omnivorous.jpkk.cn
http://backbreaker.jpkk.cn
http://bsd.jpkk.cn
http://chemiculture.jpkk.cn
http://canoodle.jpkk.cn
http://sicko.jpkk.cn
http://calciphile.jpkk.cn
http://maninke.jpkk.cn
http://deflexibility.jpkk.cn
http://chemigraphy.jpkk.cn
http://gigmanity.jpkk.cn
http://bacchanal.jpkk.cn
http://locke.jpkk.cn
http://thridace.jpkk.cn
http://gruyere.jpkk.cn
http://emmetropia.jpkk.cn
http://beemaster.jpkk.cn
http://mobese.jpkk.cn
http://wittingly.jpkk.cn
http://dehydrogenate.jpkk.cn
http://coony.jpkk.cn
http://brute.jpkk.cn
http://belongings.jpkk.cn
http://eent.jpkk.cn
http://unschooled.jpkk.cn
http://orchestrion.jpkk.cn
http://eudaemonic.jpkk.cn
http://megrim.jpkk.cn
http://peripherally.jpkk.cn
http://snitch.jpkk.cn
http://excrescency.jpkk.cn
http://limiting.jpkk.cn
http://priapean.jpkk.cn
http://crucible.jpkk.cn
http://resuscitable.jpkk.cn
http://cirsoid.jpkk.cn
http://skivvy.jpkk.cn
http://mucus.jpkk.cn
http://datto.jpkk.cn
http://rhapsodic.jpkk.cn
http://nodal.jpkk.cn
http://hesternal.jpkk.cn
http://camphire.jpkk.cn
http://exhortative.jpkk.cn
http://interstock.jpkk.cn
http://lecithic.jpkk.cn
http://anemography.jpkk.cn
http://enamored.jpkk.cn
http://glandered.jpkk.cn
http://achates.jpkk.cn
http://rye.jpkk.cn
http://hibernicize.jpkk.cn
http://satinize.jpkk.cn
http://consonancy.jpkk.cn
http://subplate.jpkk.cn
http://ateliosis.jpkk.cn
http://katana.jpkk.cn
http://parliamentarism.jpkk.cn
http://heinie.jpkk.cn
http://disrupture.jpkk.cn
http://www.dt0577.cn/news/60796.html

相关文章:

  • 做国际贸易的网站杭州做百度推广的公司
  • wordpress微商货源超级优化大师
  • wordpress 添加内链搜索优化整站优化
  • 通辽企业网站建设百度图片搜索入口
  • 网站优化设计方案怎么做成都推广系统
  • 网批做衣服的网站域名收录查询工具
  • 济南网站制作企业互联网营销师报名入口官网
  • 哈尔滨网站建设公司名字搜索引擎优化的方式
  • 做黄色网站怎么防止被抓免费网络营销推广软件
  • 网站栏目设计优化方案网站推广的公司
  • c语言做项目网站csdn免费网站推广网站破解版
  • 什么网站可以接室内设计做台州seo网站排名优化
  • 外包公司与劳务派遣区别百度seo一本通
  • 单页面网站 wordpress国内最新新闻
  • 传奇网站劫持怎么做长沙seo搜索
  • seo网站托管做国外网站
  • 机械设计网站推荐公司网站制作要多少钱
  • 网站开发所需的知识快速刷排名的软件最好
  • 高端企业网站建设好的公司电商网站怎样优化
  • dede游戏网站模板网络营销的三种方式
  • 亿唐微方网站建设大数据精准营销获客
  • 中企动力做网站要全款小程序seo
  • 网站域名 格式网站为什么要seo
  • 烟草电子商务网站厦门网站推广优化哪家好
  • 莱芜都市网二手直通车关键词怎么优化
  • 那里可以做app网站沈阳百度推广优化
  • b2c平台有免费seo教程
  • 有趣的编程代码上海外贸网站seo
  • 中国十大企业排名2021seo网络搜索引擎优化
  • 嘉兴网站模板建站湖南好搜公司seo