?? ??? ID? ???? ??? ? ?? ??? ????, ??? ? ??? ?? ???? ????. ??? ????, ?? ?? ? ?? ?? ??? ?? ID? ???? ???? ?? ??? ????. ??? ?? ? ??? ????? ?? ID ?? ??? ????. ??? ? ?? ???? ID ?? ?????.
1. ?????? ?? ?? ??? ?? ??
?? ???? ?????. ??????? ???? ?? ??????? ?????.
??:
-
???? ??? ??, ????? ??.
-
?? ID? ????? ???? ????? ??? ??? ??? ?? ?????.
??:
-
???????? ??? ??? ???? ?????? ?????? ?? ?? ?? ?????? ??? ??? ? ???? ???.
-
?? ?????? ?? ??-?? ?? ?? ??? ???? ?? ????? ?? ??? ??? ?????? ??? ? ????. ?? ?? ??? ??? ??? ????.
-
??? ?? ??? ???? ??? ?? ??? ? ?????.
-
???? ?? ?? ???? ??? ??? ??????? ??? ?? ??? ????? ????.
-
???? ??????? ??? ? ??? ?????.
??? ??:
-
?? ?????? ?? ??? ?? ?? ??? ?????? ?? ?? ? ??? ?????? ?? ??? ?? ??? ??? ?? ??? ?????. ???? ????. ?: Master1? 1, 4, 7, 10? ???? Master2? 2,5,8,11? ???? Master3? 3,6,9,12? ?????. ?? ?? ?????? ??? ID? ????? ??? ? ??? ID ?? ?????? ??? ??? ?? ?? ?? ????.
2. UUID ???? ??.
??????? ????? ???? ??? ? ????. ????? ???? ?????.
??:
-
???? ???? ????.
-
ID ?? ??? ?? ???, ????? ?? ??? ????.
-
??? ? ???? ??? ??????, ??? ??? ??, ?????? ?? ?? ???? ???? ??? ? ????.
??:
-
??? ??? ??? ????? ??? ? ????.
-
UUID? ???? ???? ???? ??? ?? ?? ???? ????? ????.
-
?? ??? ??? ? ???????? ?? ??? ???? ???.
-
??? ??? ???
-
?(?) ?? ? ????.
3. Redis? ID? ?????
??????? ???? ID? ???? ??? ???? ?? ?? Redis? ???? ID? ??? ? ? ????. ?? ?? ?? ???? Redis? ????? ????? ??? ID? ???? ??? ??? ? ????. ?? Redis? ??? ?? INCR ? INCRBY? ???? ??? ? ????.
Redis ????? ???? ? ?? ???? ?? ? ????. ????? 5?? Redis? ??? ?????. ? Redis? ?? ?? 1, 2, 3, 4, 5? ???? ? ???, ?? ?? ??? 5???. ? Redis?? ??? ID? ??? ????.
A: 1,6,11,16,21 B: 2,7,12,17,22 C: 3,8,13,18,23 D: 4,9,14 , 19,24 E: 5,10,15,20,25
??? ???? ???? ?? ??? ? ??? ??? ???? ??? ????. ??? 3~5?? ??? ????? ??? ??? ??? ? ??? ?? ?? ID? ?? ? ????. ?, ?? ??? ???? ?? ?????. Redis ????? ???? ?? ?? ?? ??? ??? ? ????.
?? Redis? ???? 0?? ???? ?? ????? ???? ?? ? ?????. ?? ?? ???? = ?? + ???? ?? ?? ?????. Redis?? ?? ?? ???? INCR? ???? ??? ? ????.
??:
-
? ??????? ???? ?? ???? ???? ???????? ??? ????.
-
?? ID? ????? ???? ????? ??? ??? ??? ?? ?????.
??:
-
???? Redis? ??? ??? ?? ??? ???? ??? ??? ???? ?????.
-
?? ? ??? ??? ???? ????? ???.
4. Twitter? ??? ????
snowflake? Twitter? ?? ?? ?? ID ?? ??????, ? ??? ? ID???. ?? ????? 41??? ??? ?? ????, 10??? ??? ID? ????(5??? ??? ??, 5??? ??? ID), 12??? ??? ?? ?? ??? ???? ????. 4096 ID ??) ??? ?? 0? ?? ??? ????. ???? ?? ??? https://github.com/twitter/snowflake
?? ??? ? ????.public class IdWorker { // ==============================Fields=========================================== /** 開始時間截 (2015-01-01) */ private final long twepoch = 1420041600000L; /** 機器id所占的位數(shù) */ private final long workerIdBits = 5L; /** 數(shù)據(jù)標識id所占的位數(shù) */ private final long datacenterIdBits = 5L; /** 支持的最大機器id,結(jié)果是31 (這個移位算法可以很快的計算出幾位二進制數(shù)所能表示的最大十進制數(shù)) */ private final long maxWorkerId = -1L ^ (-1L << workerIdBits); /** 支持的最大數(shù)據(jù)標識id,結(jié)果是31 */ private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); /** 序列在id中占的位數(shù) */ private final long sequenceBits = 12L; /** 機器ID向左移12位 */ private final long workerIdShift = sequenceBits; /** 數(shù)據(jù)標識id向左移17位(12+5) */ private final long datacenterIdShift = sequenceBits + workerIdBits; /** 時間截向左移22位(5+5+12) */ private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; /** 生成序列的掩碼,這里為4095 (0b111111111111=0xfff=4095) */ private final long sequenceMask = -1L ^ (-1L << sequenceBits); /** 工作機器ID(0~31) */ private long workerId; /** 數(shù)據(jù)中心ID(0~31) */ private long datacenterId; /** 毫秒內(nèi)序列(0~4095) */ private long sequence = 0L; /** 上次生成ID的時間截 */ private long lastTimestamp = -1L; //==============================Constructors===================================== /** * 構(gòu)造函數(shù) * @param workerId 工作ID (0~31) * @param datacenterId 數(shù)據(jù)中心ID (0~31) */ public IdWorker(long workerId, long datacenterId) { if (workerId > maxWorkerId || workerId < 0) { throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); } if (datacenterId > maxDatacenterId || datacenterId < 0) { throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); } this.workerId = workerId; this.datacenterId = datacenterId; } // ==============================Methods========================================== /** * 獲得下一個ID (該方法是線程安全的) * @return SnowflakeId */ public synchronized long nextId() { long timestamp = timeGen(); //如果當前時間小于上一次ID生成的時間戳,說明系統(tǒng)時鐘回退過這個時候應(yīng)當拋出異常 if (timestamp < lastTimestamp) { throw new RuntimeException( String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); } //如果是同一時間生成的,則進行毫秒內(nèi)序列 if (lastTimestamp == timestamp) { sequence = (sequence + 1) & sequenceMask; //毫秒內(nèi)序列溢出 if (sequence == 0) { //阻塞到下一個毫秒,獲得新的時間戳 timestamp = tilNextMillis(lastTimestamp); } } //時間戳改變,毫秒內(nèi)序列重置 else { sequence = 0L; } //上次生成ID的時間截 lastTimestamp = timestamp; //移位并通過或運算拼到一起組成64位的ID return ((timestamp - twepoch) << timestampLeftShift) // | (datacenterId << datacenterIdShift) // | (workerId << workerIdShift) // | sequence; } /** * 阻塞到下一個毫秒,直到獲得新的時間戳 * @param lastTimestamp 上次生成ID的時間截 * @return 當前時間戳 */ protected long tilNextMillis(long lastTimestamp) { long timestamp = timeGen(); while (timestamp <= lastTimestamp) { timestamp = timeGen(); } return timestamp; } /** * 返回以毫秒為單位的當前時間 * @return 當前時間(毫秒) */ protected long timeGen() { return System.currentTimeMillis(); } //==============================Test============================================= /** 測試 */ public static void main(String[] args) { IdWorker idWorker = new IdWorker(0, 0); for (int i = 0; i < 1000; i++) { long id = idWorker.nextId(); System.out.println(Long.toBinaryString(id)); System.out.println(id); } }}
snowflake ????? ????? ??? ?? ??? ? ????. ?? ??, ?? ??? ?? ?, ? ??? ??? ?? ?, ??? ??? ?? ??? ??? ??? ???? ????? ??? ?? ?? ?????.
??:
-
? ??????? ???? ?? ???? ???? ???????? ??? ????.
-
?? ???? ID? ??? ?? ?????.
??:
-
?? ????? ?????? ?? ???? ?? ? ??? ??? ??? ???? ? ??? ??? ????? ???? ?? ??? ?? ? ????.
5. Zookeeper? ???? ?? ID ??
zookeeper? ?? znode ??? ??? ?? ?? ??? ?????. ?????? ? ?? ??? ???? ??? ? ????. ?? ??.
Zookeeper? ?? ID? ???? ? ?? ???? ????. ?? ???? ???? ?? ???? API? ???? ??? ??? ??? ?? ?? ??? ???? ???. ??? ???? ?? ?? ????? ??? ????? ????.
6. MongoDB? ObjectId
MongoDB? ObjectId? ??? ????? ?????. ???? ??????, ? ????? ??? ??? ??? ???? ??? ???? ?? ??? ? ????. MongoDB? ???? ?? ??????? ?????? ?? ??? ???? ?? ?? ?? ?????. ??? ???? ????? ?? ??????. ??? ??? ????: [src/main/resources/objectId.png] ??? ?? ??? ??????:
?? 4???? ?? ????? ???? ?????(?)???. ?? 5???? ??? ?????? ? ?? ??? ???? ?????. ?????? ?? ???? ?? ObjectId? ??? ???? ?? ????? ?????. ?? ???? ??? ?? ???? ???? ?? ?? ??? ?????. ? 4???? ??? ??? ??? ?????. ???? ????? ?????? ObjectId?? ? ??? ?? ?? ???? ?????. ?? 3???? ???? ?? ??????. ????? ??? ??? ??? ?????. ??? ?? ?? ?? ???? ?? ?? ?? ?? ObjectId? ??? ? ????. ??? ???? ?? ?? ?????? ??? ObjectId? ???? ???? ?? ?? 2???? ObjectId? ??? ???? ???(PID)?? ?????. ?? 9???? ??? ?? ?? ?? ???? ?? ?? ?????? ??? ObjectId? ???? ?????. ??? 3???? ??? ?????? ??? ?? ??? ObjectId? ?? ??? ???? ?? ???? ???? ??????. ? ????? ??? ?? ?? 2563(16 777 216)?? ?? ?? ObjectId? ?? ? ????.
?? ??:
? ??? ?? ???? ?? ?? ID ?? ??? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

Redis? ???? ?? ??? ???? ???? ?? ??? ??? ??? ?? ? ????? ?????? ????? ?? ?? ???? ??? ?? ? ?? ???? ????. ?? ?????? ??? ???? ??? ?????. ??? ???? ??????? Redis? ???? ???? ? ??? ? ?? ?? ??? ??? ??? ???? ???? ??? ??? ? ????. ?? ??? ????? ????? ??/??(Publish/Subscribe) ??? ???-???? ??(Master-slave)? ? ?? ?? ??? ????.

Redis? ?? ?? ??? ????? ?? ?? ??? ?????. ?? ?? ??? ??? ????? ??? ?? ? ?????. ?? ???? ??? ???? ???? ?? ?? ?? ??? ?? ?????? ????. ??? ?-? ??????? Redis? ?? ?? ?? ???? ?????. ? ????? Redis? ???? ?? ?? ??? ???? ??? ???? ?? ?? ??? ?????. 1. ?? ?? ???? Redis ?? ???? ?? ?? ??? ?? ??? ???? ????.

Swoole? ???? ?? ?? ?? ??? ???? ?? ??: ?? PHP ????? ?? ?? ??? ???? ?? cron? ???? ??? ????. ??? cron? ?? ????? ??? ??? ? ??? ?? ??? ????? ??? ? ????. Swoole? PHP? ???? ?? ??? ??? ??? ??????, ??? ???? ?? ??? ?? ???? ??? ???? ?? ?? ?? ????? ?? ??? ? ????. ? ????? Swoole? ???? ?? ?? ?? ????? ???? ??? ?????.

Redis? ???? ?? ?? ??? ?? ?? ?? ????? ??? ?? ??? ??? ???. ?? ??????? ?? ??? ??? ??? ?? ??? ??? ??? ???? ???? ? ????. ?? ????? ?? ???? ????? ?? ?? ?? ??? ??? ??? ???? ???. ? ????? Redis? ???? ?? ?? ???? ???? ??? ???? ???? ?? ??? ?????. Redis? ???, ?? ? ??? ???? ??? ?-? ?????????.

MongoDB? ???, ??? ? ???? ?? ?? ?? NoSQL ?????????. ?? ?????? ?? ???? ? ??? ?? ?????. MongoDB? ??? ???? ?? ?? ???? ? ?? ???? ??? ? ????. 1. ?? ?? ????? ?? ?? ?? ?? ?? ????? ?? ????? ??? ?? ?? ??? ??? ???? ???????. ???? ?? ?? ?? ??? ??? ????. 1. ?? ?? ??: ?? ??? ?? ??? ?? ??? ????.

Go ??? ??? ?? ?? ?? ??? ?? ? ?? ?? ? ?? ??: ???? ??? ??? ?? ?? ??? ??? ?? ??? ???. ? ???? Go ??? ???? ?? ?? ?? ???? ???? ???? ??? ??? ?????. ? ????? ??? ???? ??, ??? ??, ?? ??, ??? ?? ? ?? ?? ???? ??? ??? ???? ???? ??? ???? ??? ?????. ???: ?? ??, ?? ???, ?? ?? 1. ?? ???? ??? ??? ??? ????

Redis? ???? ?? ?? ???? ?? ????? ???? ???? ???? ?? ?? ????? ??? ?? ???? ??? ??? ? ??? ?? ?? ????? ???? ???? ???? ???? ????? ???. ??. ??? ??? ??? ?? ??? Redis? ??, ????, ???? ??? ?? ??? ?? ?? ????? ???? ? ?? ?????. ? ????? Redis? ???? ?? ?? ??? ???? ??? ???? ?? ?? ??? ?????. 1. ??? ???

Golang ? RabbitMQ? ???? ?? ?? ?? ? ??? ???? ?? ?? ??, ?? ? ?? ?? ?? ??????? ????? ??? ??? ???? ????? ?? ?? ?? ? ??? ?? ? ????? ????. ?? ?????? ? ???????? ??? ?? ?? ??? ??? ?? ??? ????. ??? ??? ??? ????? ???? ????? ??? ???. ? ????? Golang ? RabbitMQ? ???? ?? ?? ?? ? ??? ???? ??? ?? ?? ??, ?? ? ?? ??? ?????. ?
