文章目录
- import uuid def generate_identifiers(): # 基于时间戳的UUID time_based_uuid = uuid.uuid1() print(f”基于时间的UUID: {time_based_uuid}”) # 随机UUID random_uuid = uuid.uuid4() print(f”随机UUID: {random_uuid}”) # 基于名称的UUID name_based_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, ‘example.com’) print(f”基于名称的UUID: {name_based_uuid}”)
- import uuid from datetime import datetime class User: def __init__(self, username, email): self.id = uuid.uuid4() self.username = username self.email = email self.created_at = datetime.now() def __str__(self): return f”User(id={self.id}, username={self.username})” def create_user(): user = User(“张三”, “zhangsan@example.com”) print(f”创建用户: {user}”) return user
- import uuid import os def save_file_with_uuid(content, extension=’.txt’): # 生成唯一文件名 filename = f”{uuid.uuid4()}{extension}” # 保存文件 with open(filename, ‘w’) as f: f.write(content) print(f”文件已保存: {filename}”) return filename
- import uuid from datetime import datetime, timedelta class SessionManager: def __init__(self): self.sessions = {} def create_session(self, user_id): session_id = uuid.uuid4() self.sessions[session_id] = { ‘user_id’: user_id, ‘created_at’: datetime.now(), ‘expires_at’: datetime.now() + timedelta(hours=24) } return session_id def validate_session(self, session_id): if session_id in self.sessions: session = self.sessions[session_id] if datetime.now() < session[‘expires_at’]: return True return False
- import uuid import time class DistributedIdGenerator: def __init__(self, node_id): self.node_id = node_id self.sequence = 0 def generate_id(self): # 时间戳(41位) timestamp = int(time.time() * 1000) # 节点ID(10位) node = self.node_id & 0x3FF # 序列号(12位) self.sequence = (self.sequence + 1) & 0xFFF # 组合ID unique_id = (timestamp << 22) | (node << 12) | self.sequence return unique_id
- import uuid import os from datetime import datetime class FileVersionControl: def __init__(self, base_dir): self.base_dir = base_dir os.makedirs(base_dir, exist_ok=True) def save_version(self, file_content): # 生成版本ID version_id = uuid.uuid4() timestamp = datetime.now().strftime(‘%Y%m%d_%H%M%S’) # 保存文件 filename = f”v{timestamp}_{version_id}.txt” filepath = os.path.join(self.base_dir, filename) with open(filepath, ‘w’) as f: f.write(file_content) return version_id
目录
- 简介
- 核心功能
- 1. UUID版本
- 2. UUID属性
- 3. 命名空间
- 使用场景
- 1. 生成唯一标识符
- 2. 数据库主键
- 3. 文件命名
- 4. 会话管理
- 使用注意事项
- 性能优化建议
- 错误处理最佳实践
- 实际应用案例
- 1. 分布式ID生成器
- 2. 文件版本控制
- 总结
uuid 模块是Python标准库中用于生成通用唯一标识符(Universally Unique Identifier,UUID)的模块。UUID是一个128位的标识符,可以保证在全球范围内的唯一性。这个模块在分布式系统、数据库主键、会话标识、文件命名等场景中非常有用。
uuid1(): 基于时间戳和MAC地址
uuid3(): 基于命名空间和名称的MD5哈希
uuid4(): 基于随机数
uuid5(): 基于命名空间和名称的SHA-1哈希
uuid1(): 基于时间戳和MAC地址uuid3(): 基于命名空间和名称的MD5哈希uuid4(): 基于随机数uuid5(): 基于命名空间和名称的SHA-1哈希
hex: 32个字符的十六进制字符串
int: 128位整数
bytes: 16字节的字节串
urn: URN格式的字符串
version: UUID版本号
variant: UUID变体
hex: 32个字符的十六进制字符串int: 128位整数bytes: 16字节的字节串urn: URN格式的字符串version: UUID版本号variant: UUID变体
NAMESPACE_DNS: DNS命名空间
NAMESPACE_URL: URL命名空间
NAMESPACE_OID: ISO OID命名空间
NAMESPACE_X500: X.500 DN命名空间
NAMESPACE_DNS: DNS命名空间NAMESPACE_URL: URL命名空间NAMESPACE_OID: ISO OID命名空间NAMESPACE_X500: X.500 DN命名空间
import uuid
def generate_identifiers():
# 基于时间戳的UUID
time_based_uuid = uuid.uuid1()
print(f"基于时间的UUID: {time_based_uuid}")
# 随机UUID
random_uuid = uuid.uuid4()
print(f"随机UUID: {random_uuid}")
# 基于名称的UUID
name_based_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com')
print(f"基于名称的UUID: {name_based_uuid}")
import uuid
from datetime import datetime
class User:
def __init__(self, username, email):
self.id = uuid.uuid4()
self.username = username
self.email = email
self.created_at = datetime.now()
def __str__(self):
return f"User(id={self.id}, username={self.username})"
def create_user():
user = User("张三", "zhangsan@example.com")
print(f"创建用户: {user}")
return user
import uuid
import os
def save_file_with_uuid(content, extension='.txt'):
# 生成唯一文件名
filename = f"{uuid.uuid4()}{extension}"
# 保存文件
with open(filename, 'w') as f:
f.write(content)
print(f"文件已保存: {filename}")
return filename
import uuid
from datetime import datetime, timedelta
class SessionManager:
def __init__(self):
self.sessions = {}
def create_session(self, user_id):
session_id = uuid.uuid4()
self.sessions[session_id] = {
'user_id': user_id,
'created_at': datetime.now(),
'expires_at': datetime.now() + timedelta(hours=24)
}
return session_id
def validate_session(self, session_id):
if session_id in self.sessions:
session = self.sessions[session_id]
if datetime.now() < session['expires_at']:
return True
return False
-
UUID版本选择
uuid1: 需要MAC地址,可能泄露隐私
uuid3/5: 相同输入产生相同输出
uuid4: 完全随机,最常用
-
性能考虑
uuid1 性能最好
uuid4 随机性最好
uuid3/5 适合需要确定性
-
存储优化
- 使用二进制存储
- 考虑使用整数存储
- 注意索引效率
-
安全性
- 避免使用
uuid1 泄露MAC地址
- 注意UUID碰撞概率
- 考虑使用加密UUID
UUID版本选择
uuid1: 需要MAC地址,可能泄露隐私uuid3/5: 相同输入产生相同输出uuid4: 完全随机,最常用
性能考虑
uuid1性能最好uuid4随机性最好uuid3/5适合需要确定性
存储优化
- 使用二进制存储
- 考虑使用整数存储
- 注意索引效率
安全性
- 避免使用
uuid1泄露MAC地址 - 注意UUID碰撞概率
- 考虑使用加密UUID
-
生成优化
- 批量生成UUID
- 缓存常用UUID
- 使用合适的版本
-
存储优化
- 使用二进制格式
- 压缩存储空间
- 优化索引结构
-
比较优化
- 使用整数比较
- 避免字符串比较
- 缓存比较结果
生成优化
- 批量生成UUID
- 缓存常用UUID
- 使用合适的版本
存储优化
- 使用二进制格式
- 压缩存储空间
- 优化索引结构
比较优化
- 使用整数比较
- 避免字符串比较
- 缓存比较结果
- UUID生成错误处理
import uuid
def safe_generate_uuid():
try:
return uuid.uuid4()
except Exception as e:
print(f"UUID生成失败: {e}")
# 使用备用方案
return uuid.uuid1()
- UUID验证处理
import uuid
def validate_uuid(uuid_str):
try:
# 尝试解析UUID
uuid_obj = uuid.UUID(uuid_str)
# 验证版本
if uuid_obj.version != 4:
print(f"警告: 使用了非随机UUID版本 {uuid_obj.version}")
return uuid_obj
except ValueError as e:
print(f"无效的UUID格式: {e}")
return None
import uuid
import time
class DistributedIdGenerator:
def __init__(self, node_id):
self.node_id = node_id
self.sequence = 0
def generate_id(self):
# 时间戳(41位)
timestamp = int(time.time() * 1000)
# 节点ID(10位)
node = self.node_id & 0x3FF
# 序列号(12位)
self.sequence = (self.sequence + 1) & 0xFFF
# 组合ID
unique_id = (timestamp << 22) | (node << 12) | self.sequence
return unique_id
import uuid
import os
from datetime import datetime
class FileVersionControl:
def __init__(self, base_dir):
self.base_dir = base_dir
os.makedirs(base_dir, exist_ok=True)
def save_version(self, file_content):
# 生成版本ID
version_id = uuid.uuid4()
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
# 保存文件
filename = f"v{timestamp}_{version_id}.txt"
filepath = os.path.join(self.base_dir, filename)
with open(filepath, 'w') as f:
f.write(file_content)
return version_id
uuid 模块是Python中生成唯一标识符的强大工具。通过合理使用 uuid 模块,我们可以:
- 生成全局唯一标识符
- 实现分布式ID生成
- 管理会话和缓存
- 处理文件命名
- 优化数据库设计
到此这篇关于Python通用唯一标识符模块uuid详解的文章就介绍到这了,更多相关Python uuid通用唯一标识符内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python中uuid模块生成唯一标识符的方法详解
- Python开发必知必会标识符UUID全面使用指南
- Python通用唯一标识符uuid模块使用案例
- Python标准库uuid模块(生成唯一标识)详解
- python生成大写32位uuid代码
- python生成并处理uuid的实现方式
- Python用UUID库生成唯一ID的方法示例
- python uuid模块使用实例