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

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

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

瀏覽:2日期: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 數據庫
相關文章:
主站蜘蛛池模板: 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 耐驰泵阀管件制造-耐驰泵阀科技(天津)有限公司 | 书信之家_书信标准模板范文大全| 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 好看的韩国漫画_韩漫在线免费阅读-汗汗漫画| 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 防爆型气象站_农业气象站_校园气象站_农业四情监测系统「山东万象环境科技有限公司」 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 热风机_工业热风机生产厂家上海冠顶公司提供专业热风机图片价格实惠 | 健康管理师报名入口,2025年健康管理师考试时间信息网-网站首页 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 洗瓶机厂家-酒瓶玻璃瓶冲瓶机-瓶子烘干机-封口旋盖压盖打塞机_青州惠联灌装机械 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 胀套-锁紧盘-风电锁紧盘-蛇形联轴器「厂家」-瑞安市宝德隆机械配件有限公司 | 欧景装饰设计工程有限公司-无锡欧景装饰官网 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 专业音响设备_舞台音响设备_会议音响工程-首选深圳一禾科技 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 贴片电感_贴片功率电感_贴片绕线电感_深圳市百斯特电子有限公司 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 江苏皓越真空设备有限公司| 扬子叉车厂家_升降平台_电动搬运车|堆高车-扬子仓储叉车官网 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 北京普辉律师事务所官网_北京律师24小时免费咨询|法律咨询 | 网站seo优化_seo云优化_搜索引擎seo_启新网络服务中心 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 |