简介
uuid
模块是python标准库中用于生成通用唯一标识符(universally unique identifier,uuid)的模块。uuid是一个128位的标识符,可以保证在全球范围内的唯一性。这个模块在分布式系统、数据库主键、会话标识、文件命名等场景中非常有用。
核心功能
1. uuid版本
uuid1()
: 基于时间戳和mac地址uuid3()
: 基于命名空间和名称的md5哈希uuid4()
: 基于随机数uuid5()
: 基于命名空间和名称的sha-1哈希
2. uuid属性
hex
: 32个字符的十六进制字符串int
: 128位整数bytes
: 16字节的字节串urn
: urn格式的字符串version
: uuid版本号variant
: uuid变体
3. 命名空间
namespace_dns
: dns命名空间namespace_url
: url命名空间namespace_oid
: iso oid命名空间namespace_x500
: x.500 dn命名空间
使用场景
1. 生成唯一标识符
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}")
2. 数据库主键
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
3. 文件命名
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
4. 会话管理
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
- 缓存常用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
实际应用案例
1. 分布式id生成器
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
2. 文件版本控制
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通用唯一标识符内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论