<?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位的計數序列號,...