成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊一聊雪花算法與分布式ID生成

開發(fā) 前端
總體來說,雪花算法在高并發(fā)下是一個(gè)可靠的ID生成方案。它的高性能和低碰撞概率使得它在分布式系統(tǒng)中被廣泛應(yīng)用。

生成全局唯一ID的雪花算法原理

雪花算法是一種用于生成全局唯一ID的算法,最初由Twitter開發(fā),用于解決分布式系統(tǒng)中生成ID的問題。其核心思想是將一個(gè)64位的長(zhǎng)整型ID劃分成多個(gè)部分,每個(gè)部分用于表示不同的信息,確保了生成的ID在分布式環(huán)境下的唯一性。

ID結(jié)構(gòu)

  1. 符號(hào)位(1位):始終為0,用于保證ID為正數(shù)。
  2. 時(shí)間戳(41位):表示生成ID的時(shí)間戳,精確到毫秒級(jí)。
  3. 工作節(jié)點(diǎn)ID(10位):表示生成ID的機(jī)器的唯一標(biāo)識(shí)。
  4. 序列號(hào)(12位):表示在同一毫秒內(nèi)生成的多個(gè)ID的序列號(hào)。

生成步驟

  1. 獲取當(dāng)前時(shí)間戳,精確到毫秒級(jí)。
  2. 如果當(dāng)前時(shí)間小于上次生成ID的時(shí)間,或者在同一毫秒內(nèi)生成的ID數(shù)量超過最大值,等待下一毫秒再繼續(xù)生成。
  3. 如果當(dāng)前時(shí)間等于上次生成ID的時(shí)間,序列號(hào)自增1。
  4. 如果當(dāng)前時(shí)間大于上次生成ID的時(shí)間,序列號(hào)重新從0開始。
  5. 將各個(gè)部分的值組合,得到最終的64位ID。

Go實(shí)現(xiàn)雪花算法的高并發(fā)ID生成器

package main

import (
 "fmt"
 "sync"
 "time"
)

const (
 workerBits     = 10
 sequenceBits   = 12
 workerMax      = -1 ^ (-1 << workerBits)
 sequenceMask   = -1 ^ (-1 << sequenceBits)
 timeShift      = workerBits + sequenceBits
 workerShift    = sequenceBits
 epoch          = 1609459200000
)

type Snowflake struct {
 mu          sync.Mutex
 lastTime    int64
 workerID    int64
 sequence    int64
}

func NewSnowflake(workerID int64) *Snowflake {
 if workerID < 0 || workerID > workerMax {
  panic(fmt.Sprintf("worker ID must be between 0 and %d", workerMax))
 }
 return &Snowflake{
  lastTime: time.Now().UnixNano() / 1e6,
  workerID: workerID,
  sequence: 0,
 }
}

func (sf *Snowflake) NextID() int64 {
 sf.mu.Lock()
 defer sf.mu.Unlock()

 currentTime := time.Now().UnixNano() / 1e6

 if currentTime < sf.lastTime {
  panic(fmt.Sprintf("clock moved backwards, refusing to generate ID for %d milliseconds", sf.lastTime-currentTime))
 }

 if currentTime == sf.lastTime {
  sf.sequence = (sf.sequence + 1) & sequenceMask
  if sf.sequence == 0 {
   for currentTime <= sf.lastTime {
    currentTime = time.Now().UnixNano() / 1e6
   }
  }
 } else {
  sf.sequence = 0
 }

 sf.lastTime = currentTime

 id := (currentTime-epoch)<<timeShift | (sf.workerID << workerShift) | sf.sequence
 return id
}

func main() {
 sf := NewSnowflake(1) // 假設(shè)工作節(jié)點(diǎn)ID為1

 for i := 0; i < 10; i++ {
  id := sf.NextID()
  fmt.Println(id)
  time.Sleep(time.Millisecond)
 }
}

高并發(fā)下的唯一性和遞增性保障

在高并發(fā)場(chǎng)景下,保障雪花算法生成的ID唯一性和遞增性的關(guān)鍵在于:

  1. 唯一性: 工作節(jié)點(diǎn)ID的設(shè)置保證了不同節(jié)點(diǎn)生成的ID不會(huì)沖突。序列號(hào)的自增和位運(yùn)算保證了同一毫秒內(nèi)生成的ID唯一。
  2. 遞增性: 在同一毫秒內(nèi)生成的多個(gè)ID按序列號(hào)的遞增順序排列。即使在極端情況下,同一毫秒內(nèi)生成的ID數(shù)量超過了最大值,會(huì)等待下一毫秒重新開始,也保證了遞增性。

總體來說,雪花算法在高并發(fā)下是一個(gè)可靠的ID生成方案。它的高性能和低碰撞概率使得它在分布式系統(tǒng)中被廣泛應(yīng)用。

責(zé)任編輯:武曉燕 來源: 愛發(fā)白日夢(mèng)的后端
相關(guān)推薦

2016-11-29 09:12:21

數(shù)據(jù)庫(kù)分布式ID

2020-01-17 09:07:14

分布式系統(tǒng)網(wǎng)絡(luò)

2019-09-05 13:06:08

雪花算法分布式ID

2023-09-20 23:01:03

Twitter算法

2022-02-23 07:09:30

分布式ID雪花算法

2018-04-25 09:01:02

2024-02-02 10:57:12

Java分布式算法

2024-11-19 15:55:49

2023-12-13 09:35:52

算法分布式

2021-01-29 08:32:21

數(shù)據(jù)結(jié)構(gòu)數(shù)組

2024-01-26 07:49:49

Go分布式鏈路

2019-12-13 10:50:49

集群Redis存儲(chǔ)

2020-07-21 11:35:21

開發(fā)技能代碼

2020-04-24 09:53:59

Go協(xié)作搶占

2022-03-31 10:41:35

iOS應(yīng)用提審發(fā)布

2018-03-23 10:30:56

微網(wǎng)關(guān)服務(wù)嚙合微服務(wù)

2023-09-27 09:04:50

2021-08-11 09:37:11

Redis持久化磁盤

2021-09-15 14:52:43

數(shù)字貨幣傳銷虛擬貨幣

2020-05-09 14:20:11

信息安全加密
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 毛片的网址 | 国产精品中文 | www网站在线观看 | 久草在线在线精品观看 | 欧美精品二区三区 | 美女露尿口视频 | 91精品免费视频 | 欧美午夜视频 | 91精品国产综合久久福利软件 | 色999视频 | 日韩图区 | av在线免费观看网站 | 久久久天天 | 成人黄色电影在线观看 | 一区二区三区四区视频 | 欧美一区二区在线观看 | 一区二区三区亚洲精品国 | jⅰzz亚洲| 亚洲免费视频网站 | 欧美一二三区 | 国产精品av久久久久久毛片 | 欧美 日韩 国产 成人 在线 91 | 欧美激情欧美激情在线五月 | 成人影院午夜 | 一级黄色播放 | 黄色小视频入口 | 免费观看日韩av | 91国在线视频 | 精品一区二区三区四区在线 | 99久久精品国产一区二区三区 | 成人a视频片观看免费 | 人人人干| 亚欧精品一区 | 天久久| 特黄色一级毛片 | 日韩欧美三区 | 成人自拍视频网站 | 日本久久黄色 | 亚洲欧美日韩精品久久亚洲区 | 亚洲精品第一 | 精品视频免费在线 |