中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

雪花算法(01)介紹

發布時間:2020-08-08 17:55:39 來源:網絡 閱讀:1230 作者:小布哥哥s 欄目:編程語言

針對每個公司,隨著服務化演進,單個服務越來越多,數據庫分的越來越細,有的時候一個業務需要分成好幾個庫,這時候自增主鍵或者序列之類的主鍵id生成方式已經不再滿足需求,分布式系統中需要的是一個全局唯一的id生成規則。既然號稱在全局分布式系統中唯一,那么主鍵的生成規則必然要復雜一些,以前看過很多資料,都對雪花的生成一知半解,最后才發現是對Java的位運算沒有徹底了解,這里想針對雪花算法,以一種淺顯的的方式來進行學習,去除以前的一知半解和對雪花算法的神秘感。

雪花算法生成的最終結果其實就是一個long類型的Java長整型數字,這是一個大前提!算法所有的內容都是針對這個數字進行運算的。Java基礎類型相信都很熟悉,有32位的整型int類型,和64位的長整型long類型。我們單說long類型,64位說的是數字轉換為二進制形式時候的表現,其中第一位表示的是正負,也就是符號,剩下的63位表示的是字面數字。我們來簡單看一下幾個關鍵的long數字轉換成二進制的形式:
雪花算法(01)介紹

再來看一個二進制數字轉換為long類型:

雪花算法(01)介紹

上面都是Java基礎知識,相信大家都懂。

生成一個long類型的數字id,其實就是對這64位的二進制形式里面填值,把這64位分成幾個部分,彼此間互不影響,每部分都有自己的生成規則,這樣在一定的簡單的大前提下,能保證全局唯一。

先說第一位,long類型的數字是有符號的,第一位是0就是正數,1是負數,我們生成的id必然要正數,所以第一位可以確定為0不變。

剩下的63位分成三大部分,第一部分占41位,用來表示時間,什么時間后面會詳細介紹。第二部分占10位,用來表示程序所在機器的信息,剩下的第三部分占12位,填充的是一個序列,可以理解為遞增數字,這樣前面的時間和機器數字如果都一樣的話,用序列的區別來生成不同的id。

雪花算法(01)介紹

上面的三大塊信息轉換成數字,填充到63位當中,基本可以保證任何時間任何機器生產的任何id不重復,可以推理出,時間和序列都是不可控的,但是機器信息是我們可以控制的,也就是說設置好機器信息是分布式id不重復的關鍵。

根據上面的理論可以開始學習雪花算法。

代碼地址:https://gitee.com/blueses/snowflake-demo 01

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳朔县| 宁明县| 恩平市| 东源县| 信阳市| 麻栗坡县| 福泉市| 土默特右旗| 吉林市| 长宁区| 奎屯市| 边坝县| 竹山县| 沧州市| 平罗县| 龙游县| 迁安市| 全州县| 新竹县| 若羌县| 兴和县| 巩留县| 颍上县| 内江市| 房产| 延吉市| 砚山县| 扶绥县| 贡嘎县| 贵阳市| 甘谷县| 西乡县| 钟山县| 兴山县| 桦甸市| 南宫市| 当雄县| 东明县| 松溪县| 沧州市| 湘乡市|