python 生成唯一id的实现方式

news2024/11/16 3:35:01

python 生成唯一id的实现方式

常用的python生成唯一id的四种方式

1.使用UUID

  • UUID应该是大家耳熟能详的一个东西了,它的全称叫 通用唯一识别码(英語:Universally Unique Identifier,缩写:UUID)
  • 生成标准32位uuid
import shortuuid
import uuid
# 生成一个标准格式32位UUID,参数为位数
def new_uuid(length=None):
    if length is None:
        return str(uuid.uuid1())
    else:
        return str(shortuuid.ShortUUID().random(length=length))
  • 标准uuid
import uuid
uid = uuid.uuid1()
print(uid)
print(uid.hex)

2.mongodb的ObjectId

  • 相信使用过mongodb的朋友们很清楚,它的文档默认的key其实也是一个uuid,所以我们也可以利用mongodb的ObjectId来产生一个UUID
import bson
demoid = bson.ObjectId()print(demoid)

总结:UUID/ObjectID
优点: 本机生成,效率高,全局唯一性,通用标准。
缺点:不利于存储,在Mysql的InnoDB引擎下做索引很影响效率,不利于海量数据查询。

3.雪花算法 Snowflake

  • twitter(推特)前些年把自己的唯一ID生成算法开源了,也叫做雪花算法,取自(世界上没有一片相同的雪花)
  • pysnowflake 库安装
pip install pysnowflake -i https://pypi.tuna.tsinghua.edu.cn/simple/
# Importing the `snowflake.client` module.
import snowflake.client

# Calling the `get_guid()` function from the `snowflake.client` module.
uuid = snowflake.client.get_guid()

# Printing the value of the `uuid` variable.
print(uuid)

# Printing the binary representation of the `uuid` variable.
print(bin(uuid))

# 4674877370191056897
# 0b100000011100000100000000011001100011010110000000001000000000001

在这里插入图片描述

优点: 不依赖第三方系统,ID全局唯一,数据具有递增的连续性,便于查询。
缺点:依赖系统时钟,如果系统时钟有问题,会导致ID重复(该问题可以通过很多方式避免)

4.时间戳id

4.1、获取秒级时间戳与毫秒级时间戳、微秒级时间戳
import time
import datetime
 
t = time.time()
 
print (t)                       #原始时间数据
print (int(t))                  #秒级时间戳
print (int(round(t * 1000)))    #毫秒级时间戳
print (int(round(t * 1000000))) #微秒级时间戳
  • 返回
1499825149.257892    #原始时间数据
1499825149           #秒级时间戳,10位
1499825149257        #毫秒级时间戳,13位
1499825149257892     #微秒级时间戳,16位
4.2 获取当前日期时间
dt = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
dt_ms = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') # 含微秒的日期时间,来源 比特量化
print(dt)
print(dt_ms)
  • 返回
2018-09-06 21:54:46
2018-09-06 21:54:46.205213
4.3 将日期转为秒级时间戳
dt = '2018-01-01 10:40:30'
ts = int(time.mktime(time.strptime(dt, "%Y-%m-%d %H:%M:%S")))
print (ts)
  • 返回
1514774430
4.4 UTC时间
dt2 = '2023-02-04T02:12:05.047Z'
dt = dt2[0:19].replace('T', ' ')
ts = int(time.mktime(time.strptime(dt, "%Y-%m-%d %H:%M:%S")))
  • 返回
1675447925
4.5 将秒级时间戳转为日期
ts = 1515774430
dt = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(ts))
print(dt)
  • 返回
2018-01-13 00:27:10
4.6 时间格式转成另一种时间格式
dt = '08/02/2019 01:00'
dt_new = datetime.datetime.strptime(dt, '%m/%d/%Y %H:%M').strftime('%Y-%m-%d %H:%M:%S')
print(dt_new)
  • 返回
2019-08-02 01:00:00
4.7 转结构体时间struct_time
ta_dt = time.strptime("2018-09-06 21:54:46", '%Y-%m-%d %H:%M:%S')  #日期时间转结构体 
ta_ms = time.localtime(1486188476) #时间戳转结构体,注意时间戳要求为int,来源 比特量化
print(ta_dt)
print(ta_ms)
  • 返回
time.struct_time(tm_year=2018, tm_mon=9, tm_mday=6, tm_hour=21, tm_min=54, tm_sec=46, tm_wday=3, tm_yday=249, tm_isdst=-1)
time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=7, tm_sec=56, tm_wday=5, tm_yday=35, tm_isdst=0)
4.8 python获取纳秒级时间戳方法(19位)
import time
print(time.time_ns())
  • 返回
1600251903664616300

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对比多个笔记软件后,我选择了语雀

1、前言 早在两年前,那是我第一次用语雀,第一次使用时,就被其用户体验所震撼。它的操作界面简洁、清晰、易于上手,而且功能齐全、方便实用。但是那时候除了工作的笔记,大部分都还在印象笔记上面,也有部分文…

std::chrono笔记

文章目录1. radio原型作用示例2. duration原型:作用示例3. time_point原型作用示例4. clockssystem_clock示例steady_clock示例high_resolution_clock先说感觉,这个库真恶心,刚接触感觉跟shi一样,特别是那个命名空间,太…

人工智能高等数学--人工智能需要的数学知识_微积分_线性代数_概率论_最优化---人工智能工作笔记0024

然后我们看一下人工智能中需要的数学知识 数学知识是重要的,对于理解人工智能底层原理来说很重要,但是工作中 工作中一般都不会涉及的自己写算法之类的,只是面试,或者理解底层原理的时候需要 然后看一下人工智能需要哪些数学知识 这里需要微积分 线性代数 概率论 最优化的知识…

狂神说:面向对象(三)——多态

多态// 对象能执行什么方法,主要看对象左边的类型,和右边的没有关系多态:同一方法可以根据发送对象的不同而采用不同的行为方式父类:public class Person {public void run(){System.out.println("Person > run");}}…

跳跃游戏 (贪心/动态规划/dfs)

1.跳跃游戏简单介绍 跳跃游戏是一种典型的算法题目,经常是给定一数组arr[],从数组的某一位置i出发,根据一定的跳跃规则,比如从i位置能跳arr[i]步,或者小于arr[i]步,或者固定步数,直到到达某一位…

Java 【数据结构OJ题十道】—— 二叉树篇2

文章目录一、二叉树前序遍历二、二叉树层序遍历三、按照之字形打印二叉树四、二叉树中和为某一值的路径(一)五、二叉搜索树与双向链表六、合并二叉树七、二叉树的镜像八、判断是否为二叉搜索树九、判断是否为完全二叉树十、判断是否为平衡二叉树总结提示:本人是正在…

TCP中RTT时延的理解

最近服务器环境部署了tcprtt网络时延监控,发现不同服务器不同节点之间的RTT时延表象非常奇怪,无法准确的判断服务器的网络情况。因此需要弄清楚什么是RTT,以及能否作为服务器网络性能的检测指标。 1、RTT是什么? TCP中的RTT指的是…

倾向得分匹配案例分析

一、倾向得分匹配法说明 倾向得分匹配模型是由Rosenbaum和Rubin在1983年提出的,首次运用在生物医药领域,后来被广泛运用在药物治疗、计量研究、政策实施评价等领域。倾向得分匹配模型主要用来解决非处理因素(干扰因素)的偏差。 …

为什么硬件性能监控很重要

当今的混合网络环境平衡了分布式网络和现代技术的实施。但它们并不缺少一个核心组件:服务器。保持网络正常运行时间归结为监控和管理导致网络停机的因素。极有可能导致性能异常的此类因素之一是硬件。使用硬件监控器监控网络硬件已成为一项关键需求。 硬件监视器是…

连接金蝶云星空,数据交互轻松搞定!丨三叠云

金蝶云星空 路径 拓展 >> 插件 功能简介 新增插件「金蝶云星空」。 用户可通过配置「金蝶云星空」插件,就可以实时获取「金蝶云星空」的数据,同时支持回填数据至金蝶系统内。 地图视图 路径 表单 >> 表单设计 功能简介 新增「地图视…

prometheus+cadvisor监控docker

官方解释 cAdvisor(ContainerAdvisor)为容器用户提供了对其运行容器的资源使用和性能特性的了解。它是一个正在运行的守护程序,用于收集、聚合、处理和导出有关正在运行的容器的信息。具体来说,它为每个容器保存资源隔离参数、历史…

活动目录(Active Directory)组策略管理工具

活动目录(Active Directory)是面向Windows Standard Server、Windows Enterprise Server以及 Windows Datacenter Server的目录服务。(Active Directory不能运行在Windows Web Server上,但是可以通过它对运行Windows Web Server的…

虚拟数字人直播带货相比人工有哪些优势?

新经济时代的到来,彻底改变了传统的消费方式。虚拟数字人的出现,标志着新一波的消费升级到来。虚拟数字人直播带货,不仅降低了商家的带货成本,拉近了商家与消费者的距离,也给消费者带来全新的消费方式。 花西子虚拟形象…

华为OD机试模拟题 用 C++ 实现 - 删除最少字符(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明删除最少字符题目输入输出描述示例一输入输出示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率…

在Redis集群模式下使用pipeline进行批量操作

最近开始又接触到了Redis,之前在工作中使用Redis的时候,由于QPS不高,都是直接get/set搞定了。这次遇到的业务数据量比较大,更新也很频繁,Redis使用是集群模式,所以本文记录下捣鼓出来的如何在集群模式下使用…

动手学深度学习(第二版)学习笔记 第三章

第三章 线性神经网络 代码:d2l-zh/pytorch/chapter_linear-networks 3.1 线性回归 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation 解析解 线性回归的解可以用一个公式简单地表达出来,这类解叫作解析解(analytical solution&…

深度学习实战19(进阶版)-SpeakGPT的本地实现部署测试,基于ChatGPT在自己的平台实现SpeakGPT功能

大家好,我是微学AI,今天给大家带来SpeakGPT的本地实现,在自己的网页部署,可随时随地通过语音进行问答,本项目项目是基于ChatGPT的语音版,我称之为SpeakGPT。 ChatGPT最近大火,其实在去年12月份…

「架构」全链路异步模式

总结自尼恩的全链路异步:网关纯异步化网关层的特点:不需要访问业务数据库只做协议转换和流量转发特点是 IO 密集型,特别适合纯异步的架构,可以极大的节省资源。如何进行网关异步化?使用高性能的通信框架Netty&#xff…

CSS3新增的视口单位Vh、Vw单位

定义vw:浏览器可见视口【宽度】的百分比(1vw代表视窗【宽度】的1%)vh:浏览器可见视口【高度】的百分比(1vw代表视窗【高度】的1%)vmin:当前 vw 和 vh 较小的一个值。vmax:当前 vw 和…

现在入行软测=49年入国军?三句话,让面试官再掏2K!

还有三五天就步入金三银四,很多软测人吐槽因为疫情,公司都在裁员,别说跳槽涨薪,能保住现在的工作就不错了。但也有那么一批人,凭借自己口才与实力拿到年薪近50W的offer。面试是初见1小时就要相互了解优缺点的过程&…