前面的理論基礎和位運算都了解了,下面我們來生成雪花算法的第一部分,也就是時間部分。時間部分的邏輯起始很簡單,就是規(guī)定一個起始時間戳,然后用當前時間戳減去起始時間戳,這兩個數的差就是我們要的結果。簡單看一下代碼邏輯:
創(chuàng)新互聯建站專注于鹽亭網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供鹽亭營銷型網站建設,鹽亭網站制作、鹽亭網頁設計、鹽亭網站官網定制、微信小程序定制開發(fā)服務,打造鹽亭網絡公司原創(chuàng)品牌,更為您提供鹽亭網站排名全網營銷落地服務。我們規(guī)定的起始時間是 2015-01-01 00:00:00 ,然后獲取當前時間,用當前時間減去起始時間,就是我們要的時間部分的數值。這個時候就有一個問題了,如果我們系統(tǒng)的時鐘錯了會不會有問題?會!所以要做判斷!而且系統(tǒng)的時鐘錯誤也是雪花算法的一個致命問題,所以要一定要保證服務器的系統(tǒng)時間正確。來看一下對時間戳的判斷:
定義了一個變量LAST_TIME_STAMP記為上次id的生成時間,每次生成都標記一下,所以這個時間一定是遞增的,如果系統(tǒng)時鐘除了問題,那么直接報異常。這是對系統(tǒng)時間錯誤的一個判斷和處理。
就這樣時間部分就生成了,現在看看還是很簡單的?,F在我們再來看雪花算法的時間范圍,由于時間共占有41位,所以時間的數字范圍是有一個大值的,寫成2進制就是41個1,比如我們的起始時間是2015-01-01 00:00:00,時間戳是1420041600000L,把41個1轉換成long類型數字,再加上這個時間戳數字,就是一個雪花算法最終的時間戳,轉換成時間就是2084-09-06 15:47:35,也就是這個41位時間的雪花算法最長使用69年9個月6天零15小時47分35秒,不過對于一個項目來說,這樣的限制不算限制,足足的夠用了。
代碼地址:https://gitee.com/blueses/snowflake-demo 03
創(chuàng)新互聯www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現已開啟,新人活動云服務器買多久送多久。