webman雪花id生成類

1.0.2
版本
2025-03-21
版本更新時(shí)間
147
安裝
5
star
簡(jiǎn)介
Webman 雪花 ID 生成類
使用簡(jiǎn)單、高效的雪花 ID 算法生成唯一的 64 位整數(shù) ID,支持高并發(fā)場(chǎng)景,適合分布式系統(tǒng)中唯一標(biāo)識(shí)的生成需求。
安裝
composer require jisheng100/snowflake
使用
1. 生成雪花id
$id = \Jisheng100\Snowflake\Snowflake::instance()->generateId();
2. 解析雪花id
$detail = \Jisheng100\Snowflake\Snowflake::instance()->parseId($id);
配置
雪花 ID 算法基于 64 位整數(shù)設(shè)計(jì),其中:
- 符號(hào)位:1 位,始終為 0,保證生成的 ID 為正數(shù)。
- 時(shí)間戳:41 位,表示毫秒級(jí)時(shí)間戳,足夠支持約 69 年的時(shí)間跨度。
- 機(jī)器 ID + 進(jìn)程 ID:共 10 位,用于標(biāo)識(shí)唯一的機(jī)器和進(jìn)程。
- 序列號(hào):12 位,用于在同一毫秒內(nèi)生成多個(gè)唯一 ID,支持每毫秒最多生成 4096 個(gè) ID。
配置參數(shù)說(shuō)明
可以根據(jù)業(yè)務(wù)需求自定義以下參數(shù),確保在高并發(fā)場(chǎng)景下生成唯一 ID:
return [
'enable' => true,
'machine_id' => 0, // 機(jī)器 ID,多臺(tái)機(jī)器需配置唯一值
'machine_id_bits' => 3, // 機(jī)器 ID 位數(shù),范圍 0-7(2^3=8)
'process_id_bits' => 7, // 進(jìn)程 ID 位數(shù),范圍 0-127(2^7=128)
'sequence_bits' => 12, // 序列號(hào)位數(shù),每毫秒最多生成 4096(2^12)個(gè) ID
];
注意事項(xiàng)
- 機(jī)器 ID 配置:多臺(tái)機(jī)器需確保 machine_id 值唯一, machine_id的設(shè)值取決于機(jī)器id位數(shù),如machine_id_bits設(shè)置為3,則machine_id的設(shè)置值為0-7
- 進(jìn)程 ID 位數(shù):需大于等于實(shí)際業(yè)務(wù)所需的最大進(jìn)程數(shù)。例如,如果業(yè)務(wù)使用了 64 個(gè)進(jìn)程,則 process_id_bits 至少為 6 位。
- 序列號(hào)位數(shù):默認(rèn)支持每毫秒生成 4096 個(gè) ID,如需更高并發(fā),可調(diào)整配置。