唯一随机ID是指为数据模型或对象生成的具有唯一性保证的标识符,通常用于数据库主键、分布式系统中的对象标识等场景。这类ID需要满足以下基本要求:
实现原理:基于时间戳、随机数和MAC地址等信息生成128位标识符
优势:
示例代码:
import uuid
# 生成UUID
unique_id = uuid.uuid4()
print(unique_id) # 输出类似: f47ac10b-58cc-4372-a567-0e02b2c3d479
实现原理:利用数据库的自增字段特性
优势:
示例代码(SQL):
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
实现原理:64位长整型,包含时间戳、工作节点ID和序列号
优势:
示例代码(Java):
public class SnowflakeIdGenerator {
private final long workerId;
private long sequence = 0L;
private long lastTimestamp = -1L;
public synchronized long nextId() {
long timestamp = System.currentTimeMillis();
if (timestamp < lastTimestamp) {
throw new RuntimeException("Clock moved backwards");
}
if (lastTimestamp == timestamp) {
sequence = (sequence + 1) & 4095;
if (sequence == 0) {
timestamp = tilNextMillis(lastTimestamp);
}
} else {
sequence = 0L;
}
lastTimestamp = timestamp;
return ((timestamp - 1288834974657L) << 22) | (workerId << 12) | sequence;
}
}
实现原理:12字节的十六进制字符串,包含时间戳、机器标识、进程ID和计数器
优势:
原因:标准UUID是128位,比普通整型占用更多空间
解决方案:
原因:多个节点同时生成ID可能导致冲突
解决方案:
原因:某些业务场景希望从ID中解析出时间、类型等信息
解决方案:
根据具体应用场景和规模选择合适的ID生成策略是关键。