当前位置:首页 > 代码 > 正文

uuid生成器源代码(UUID生成器)

admin 发布:2022-12-19 18:20 95


本篇文章给大家谈谈uuid生成器源代码,以及UUID生成器对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

os 怎么改hardware uuid

Java UUID Generator (JUG):开源UUID生成器,LGPL协议,支持MAC地址。

UUID:特殊的License,有源码。

Java 5以上版本中自带的UUID生成器:好像只能生成Version 3/4的UUID。

java自带的uuid生成器生成的uuid靠谱吗

这是靠谱的。

因为java自带的UUID类,它是通过结合机器的网卡、时间、一个随即数来生成ID的。如果一台机器每秒产生10000000个ID,可以保证(概率意义上)3240年不重复。

etl 导excl怎么生成uuid

1、创建数据库表

在创建数据库的时候,主键的主键的生成方式通常有两种,一种是利用数据库的主键自增,产生主键,这也是常用的主键的生成方式。另一种为通过生成的随机序列当做主键。通过excel导入数据库时,excel的数据中包含随机序列时,可以直接将数据导入数据库,当做主键使用。但是如果没有的话,处理则相对比较麻烦(本博客介绍不包含随机数列的情况)。

没有随机数列时,为了能够将excel中的数据导入数据库中,创建数据库表时,暂时将主键去掉,只保留主键字段。在此,我们创建test表,主键id并未标记。

CREATE TABLE `test` (

`ID` varchar(50) DEFAULT NULL COMMENT '测试id',

`NAME` varchar(100) DEFAULT NULL COMMENT '名称',

`CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',

`UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新时间'

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试表';

2、将excel数据导入数据库表test中

注意:先用excel打开excel表格,否则会提示无法打开excel文件

右键test-导入向导-Excel文件(2007或以上版本)(*.xlsx)-导入-下一步-下一步

在对应的“源栏位”处选择excel中对应的内容,然后依次点击下一步-下一步-开始,完成excel中数据导入数据库表中。

3、在id中生成uuid

UPDATE test SET ID= UUID();

注意,生成id时,不要直接将uuid()产生的序列中的''-"通过Replace方法去掉,不然生成的id的将全部相同。

4、将生成的id中的"-"替换掉

UPDATE test SET ID = (SELECT REPLACE(ID,'-',''));

5、生成时间

UPDATE test SET UPDATE_TIME = CURRENT_TIMESTAMP();

6、生成标准化的数据库

首先,将已经导入到test表中的数据通过sql转储,进行保存。然后将test表删除,然后建立标准的数据库test表(比如主键为id,创建时间为非空等),最后将sql转储的数据导入的数据库表中,完成数据的导入。

分布式ID生成器

在分布式系统中,往往需要对大量的数据和消息进行唯一标识,此时一个能够生成全局唯一ID的系统是非常必要的,那么业务系统对ID号的要求有哪些呢?

UUID

UUID(Universally Unique Identifier)的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的36个字符,示例:5e8c4456-6166-40d6-9b9f-fb37a150bc6e,到目前为止业界一共有5种方式生成UUI,Java标准类库中已经提供了UUID的API。

优点:

缺点:

类snowflake方案

雪花ID生成的是一个64位的二进制正整数,然后转换成10进制的数。64位二进制数由如下部分组成:

41-bit的时间可以表示(1L41)/(1000L*3600*24*365)=69年的时间,10-bit机器可以分别表示1024台机器。如果我们对IDC划分有需求,还可以将10-bit分5-bit给IDC,分5-bit给工作机器。这样就可以表示32个IDC,每个IDC下可以有32台机器,可以根据自身需求定义。12个自增序列号可以表示2^12个ID,理论上snowflake方案的QPS约为409.6w/s,这种分配方式可以保证在任何一个IDC的任何一台机器在任意毫秒内生成的ID都是不同的。

但是对于绝大部分普通应用程序来说,根本不需要每秒超过400万的ID,机器数量也达不到1024台,所以,我们可以改进一下,使用更短的ID生成方式:53bitID由32bit秒级时间戳+16bit自增+5bit机器标识组成,累积32台机器,每秒可以生成6.5万个序列号。

代码示例

最后,为什么采用最多53位整型,而不是64位整型?这是因为考虑到大部分应用程序是Web应用,如果要和JavaScript打交道,由于JavaScript支持的最大整型就是53位,超过这个位数,JavaScript将丢失精度。因此,使用53位整数可以直接由JavaScript读取,而超过53位时,就必须转换成字符串才能保证JavaScript处理正确,这会给API接口带来额外的复杂度。

参考资料:

使用java.util.UUID生成唯一标识,为什么生成唯一标识的方法有些还需要参数?

//先看不加参数的源码

public static UUID randomUUID() {

        SecureRandom ng = Holder.numberGenerator;

        byte[] randomBytes = new byte[16];

        ng.nextBytes(randomBytes);

        randomBytes[6]  = 0x0f;  /* clear version        */

        randomBytes[6]  |= 0x40;  /* set to version 4     */

        randomBytes[8]  = 0x3f;  /* clear variant        */

        randomBytes[8]  |= 0x80;  /* set to IETF variant  */

        return new UUID(randomBytes);//看到这里没,其实也是调用的带参数的,只不过

        //所带参数的是给你随机出来的

    }

    

    //再看带参数的

     public static UUID nameUUIDFromBytes(byte[] name) {

        MessageDigest md;

        try {

            md = MessageDigest.getInstance("MD5");

        } catch (NoSuchAlgorithmException nsae) {

            throw new InternalError("MD5 not supported");

        }

        byte[] md5Bytes = md.digest(name);//这里就是对给的byte[]参数进行md5运算之后再进行计算UUID

        md5Bytes[6]  = 0x0f;  /* clear version        */

        md5Bytes[6]  |= 0x30;  /* set to version 3     */

        md5Bytes[8]  = 0x3f;  /* clear variant        */

        md5Bytes[8]  |= 0x80;  /* set to IETF variant  */

        return new UUID(md5Bytes);

    }

uuid生成器源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于UUID生成器、uuid生成器源代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/17154.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载