雪花演算法 php Snowflake

2021-10-07 11:45:41 字數 1447 閱讀 8001

<?php

/*** /**

* id 生成策略

* 毫秒級時間41位+機器id, 10位+毫秒內序列12位。高位始終為0,表示正數。

* 0 41 51 64

* +-----------+------+------+

* |time |pc |inc |

* +-----------+------+------+

* 前41bits是以微秒為單位的timestamp。

* 接著10bits是事先配置好的機器id。

* 最後12bits是累加計數器。

* macheine id(10bits)標明最多只能有1024臺機器同時產生id,sequence number(12bits)也標明1臺機器1ms中最多產生4096個id,

* */

namespace

;class

snowflake

return self:

:$self;}

public

function

setworkid

($workid

) self:

:$workerid

=$workid

;return self:

:$self;}

private

function

timegen()

private

function

tilnextmillis

($lasttimestamp

)return

$timestamp;}

public

functionid(

)}elseif(

$timestamp

< self:

:$lasttimestamp

) self:

:$lasttimestamp

=$timestamp;if

(php_int_size

===4

)$nextid=(

(sprintf

('%.0f'

,$timestamp)-

sprintf

( '%

.0f',

self:

:$twepoch))

<

< self:

:$timestampleftshift)|

(self:

:$workerid

<

< self:

:$workeridshift

)| self:

:$sequence

;return

$nextid;}

}

《演算法競賽高階指南》 雪花雪花雪花

有n片雪花,每片雪花由六個角組成,每個角都有長度。第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,ai,6。因為雪花的形狀是封閉的環形,所以從任何乙個角開始順時針或逆時針往後記錄長度,得到的六元組都代表形狀相同的雪花。例如ai,1,ai,2,ai,6和ai,2,ai,3,ai,6...

《演算法 雪花演算法》

一 概述 snowflake 演算法 是 twitter 開源的分布式 id 生成演算法。應用場景 高效能的產生不重複id,支援集群的橫向擴充套件。二 原理 其核心思想就是 使用乙個 64 bit 的 long 型的數字作為全域性唯一 id。在分布式系統中的應用十分廣泛,且id 引入了時間戳,基本上...

雪花演算法詳解

前言 雪花演算法是用來在分布式場景下生成唯一id的。敘述 雪花演算法簡單描述 最高位是符號位,始終為0,不可用。41位的時間序列,精確到毫秒級,41位的長度可以使用69年。時間位還有乙個很重要的作用是可以根據時間進行排序。10位的機器標識,10位的長度最多支援部署1024個節點。12位的計數序列號,...