电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

mybatis-plus雪花算法自動生成機器id原理及源碼

瀏覽:5日期:2023-10-19 10:44:29
目錄1、雪花算法原理2、自動生成唯一機器號源碼1、雪花算法原理

雪花算法使用一個 64 bit 的 long 型的數字作為全局唯一 id。這 64 個 bit 中,其中 1 個 bit 是不用的,然后用其中的 41 bit 作為毫秒數,用 10 bit 作為工作機器 id,12 bit 作為序列號。

mybatis-plus雪花算法自動生成機器id原理及源碼

1bit,不用,因為二進制中最高位是符號位,1表示負數,0表示正數。生成的id一般都是用整數,所以最高位固定為0。 41bit-時間戳,用來記錄時間戳,毫秒級。 10bit-工作機器id,用來記錄工作機器id。 12bit-序列號,序列號,用來記錄同毫秒內產生的不同id。即可以用0、1、2、3、…4094這4095個數字,來表示同一機器同一時間截(毫秒)內產生的4095個ID序號。

SnowFlake可以保證:

所有生成的id按時間趨勢遞增整個分布式系統內不會產生重復id(因為有datacenterId和workerId來做區分)

如上大概了解了雪花算法的原理,而且也知道機器號對于雪花算法的重要性。如果機器號一樣,可能會出現id重復的情況。

mybatis-plus自3.3.0開始,默認使用雪花算法+UUID(不含中劃線),但是它并沒有強制讓開發者配置機器號。這一點很是疑惑,這樣可能會讓不了解雪花算法的人埋下了一個坑。但是這么強大的一個框架難道真的沒有做優化嗎?帶著問題,查看了下mybatis-plus雪花算法源碼com.baomidou.mybatisplus.core.toolkit.Sequence。最終發現在沒有設置機器號的情況下,會通過當前物理網卡地址和jvm的進程ID自動生成。這真的是一個較好的解決方案。一般在一個集群中,MAC+JVM進程PID一樣的幾率非常小。

2、自動生成唯一機器號源碼

核心代碼。有兩個構造方法,一個無參構造,一個有參構造。

public Sequence() { //通過當前物理網卡地址獲取datacenterId this.datacenterId = getDatacenterId(maxDatacenterId); //物理網卡地址+jvm進程pi獲取workerId this.workerId = getMaxWorkerId(datacenterId, maxWorkerId);}/** * 有參構造器 * * @param workerId 工作機器 ID * @param datacenterId 序列號 */public Sequence(long workerId, long datacenterId) { Assert.isFalse(workerId > maxWorkerId || workerId < 0, String.format('worker Id can’t be greater than %d or less than 0', maxWorkerId)); Assert.isFalse(datacenterId > maxDatacenterId || datacenterId < 0, String.format('datacenter Id can’t be greater than %d or less than 0', maxDatacenterId)); this.workerId = workerId; this.datacenterId = datacenterId;} 無參構造 開發者沒有設置機器號時 有參構造 開發者自行設置機器號

protected static long getDatacenterId(long maxDatacenterId) { long id = 0L; try {//獲取本機(或者服務器ip地址)//DESKTOP-123SDAD/192.168.1.87InetAddress ip = InetAddress.getLocalHost();NetworkInterface network = NetworkInterface.getByInetAddress(ip);//一般不是null會進入elseif (network == null) { id = 1L;} else { //獲取物理網卡地址 byte[] mac = network.getHardwareAddress(); if (null != mac) {id = ((0x000000FF & (long) mac[mac.length - 2]) | (0x0000FF00 & (((long) mac[mac.length - 1]) << 8))) >> 6;id = id % (maxDatacenterId + 1); }} } catch (Exception e) {logger.warn(' getDatacenterId: ' + e.getMessage()); } return id;}

/** * 獲取 maxWorkerId */protected static long getMaxWorkerId(long datacenterId, long maxWorkerId) { StringBuilder mpid = new StringBuilder(); mpid.append(datacenterId); //獲取jvm進程信息 String name = ManagementFactory.getRuntimeMXBean().getName(); if (StringUtils.isNotBlank(name)) {/* * 獲取進程PID */mpid.append(name.split(StringPool.AT)[0]); } /* * MAC + PID 的 hashcode 獲取16個低位 */ return (mpid.toString().hashCode() & 0xffff) % (maxWorkerId + 1);}

以上就是mybatis-plus雪花算法自動生成機器id原理的詳細內容,更多關于mybatis plus雪花id的資料請關注好吧啦網其它相關文章!

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 管形母线,全绝缘铜管母线厂家-山东佰特电气科技有限公司 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 | 写方案网_方案策划方案模板下载| 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 卸料器-卸灰阀-卸料阀-瑞安市天蓝环保设备有限公司 | 猎头招聘_深圳猎头公司_知名猎头公司| pbootcms网站模板|织梦模板|网站源码|jquery建站特效-html5模板网 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 开云(中国)Kaiyun·官方网站 - 登录入口 | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 自动气象站_气象站监测设备_全自动气象站设备_雨量监测站-山东风途物联网 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 健康管理师报名入口,2025年健康管理师考试时间信息网-网站首页 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 探伤仪,漆膜厚度测试仪,轮胎花纹深度尺厂家-淄博创宇电子 | 液氨泵,液化气泵-淄博「亚泰」燃气设备制造有限公司 | 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 加中寰球移民官网-美国移民公司,移民机构,移民中介,移民咨询,投资移民 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 博博会2021_中国博物馆及相关产品与技术博览会【博博会】 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 |