- UUID(可以用)
public class MyTest {
public static void main(String[] args) {
System.out.println(java.util.UUID.randomUUID().toString());
}
}
- 独立数据库的自增ID
单独的创建一个Mysql数据库,在这个数据库中创建一张表,这张表的ID设置为自增,其他地方需要全局唯一ID的时候,就模拟向这个Mysql数据库的这张表中模拟插入一条记录,此时ID会自增,然后我们可以通过Mysql的select last_insert_id() 获取到刚刚这张表中自增生成的ID.
-- ----------------------------
-- Table structure for DISTRIBUTE_ID
-- ----------------------------
DROP TABLE IF EXISTS `DISTRIBUTE_ID`;
CREATE TABLE `DISTRIBUTE_ID` (
`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '主键',
`createtime` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
当分布式集群环境中哪个应用需要获取一个全局唯一的分布式ID的时候,就可以使用代码连接这个数据库实例,执行如下sql语句即可。
insert into DISTRIBUTE_ID(createtime) values(NOW());
select LAST_INSERT_ID();
-
SnowFlake 雪花算法(可以用,推荐)
雪花算法是一个算法,基于这个算法可以生成ID,生成的ID是一个long型
-
借助Redis的Incr命令获取全局唯一ID(推荐)
1)安装redis
修改redis.conf
启动redis
2)Java代码中使用Jedis客户端调用Reids的incr命令获得一个全局的id
引入jedis客户端
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2)Java代码(此处我们就是连接单节点,也不使用连接池)
Jedis jedis = new Jedis("127.0.0.1",6379);
try {
long id = jedis.incr("id");
System.out.println("从redis中获取的分布式id为:" + id);
} finally {
if (null != jedis) {
jedis.close();
}
}