一、使用UUID生成
1.定义
UUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。
2.用法
在java使用UUID非常简单,在jdk的工具类中已经有生成UUID的类可以直接使用,如下:
代码实例:
运行结果:
可以看出在单机环境下,生成的uuid不会重复
3.优缺点
优点 | 缺点 |
---|---|
使用简单 | 数据库索引效率低(这里针对mysql的b+树索引而言) |
不依赖其他组件,直接是使用jdk工具类 | 太长无意义,用户不友好 |
不影响数据库的拓展 | 空间占用大 |
在应用集群环境,机器多的时候,重复几率很大!!! |
二、使用数据库自增序列生成
1.定义
利用数据库,全数据库唯一。
2.用法
设置mysql数据库自增长起始值以及步长,多个不同数据库应设置不同起始值,而步长设置一致,则每个数据库生成的自增序列码可以避免相同。
以一个数据库中设置为例:
代码:
SHOW VARIABLES like 'auto_inc%';//查看自增相关变量值
set auto_increment_increment=100;//设置步长
set auto_increment_offset=1;//设置起始值
INSERT into `user`VALUES(null);//模拟插入数据
结果运行图: