亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

雪花算法(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

武陟县| 仪陇县| 兴国县| 天柱县| 康定县| 泸定县| 红原县| 阿克陶县| 新闻| 宜兴市| 昌乐县| 禄劝| 紫阳县| 元阳县| 山西省| 林西县| 灵寿县| 诸暨市| 宜川县| 格尔木市| 金塔县| 凤翔县| 茂名市| 会同县| 台北市| 安国市| 吉安市| 临颍县| 霍山县| 兴国县| 杨浦区| 翁牛特旗| 蒙城县| 同仁县| 宜君县| 湘潭县| 五常市| 阿图什市| 巫溪县| 灵石县| 黑水县|