本文目录导读:

Java生态中已经有许多成熟的分布式ID生成方案,并且很多都提供了完善的API和客户端库,以下是几个主流方案及其对应的Java API:
雪花算法(Snowflake)
原生实现
许多框架自带雪花算法实现:
// Hutool import cn.hutool.core.lang.Snowflake; Snowflake snowflake = new Snowflake(1, 1); long id = snowflake.nextId(); // MyBatis-Plus import com.baomidou.mybatisplus.core.toolkit.IdWorker; long id = IdWorker.getId();
Leaf(美团)
美团开源的分布式ID生成系统,提供HTTP和RPC接口。
<!-- Maven依赖 -->
<dependency>
<groupId>com.sankuai.inf.leaf</groupId>
<artifactId>leaf-boot-starter</artifactId>
<version>1.0.1</version>
</dependency>
@Autowired
private LeafService leafService;
// 获取ID
Result result = leafService.getId("your-key");
long id = result.getId();
UidGenerator(百度)
基于snowflake的改进方案。
<dependency>
<groupId>com.baidu.fsg</groupId>
<artifactId>uid-generator</artifactId>
<version>1.0.0</version>
</dependency>
@Resource private UidGenerator uidGenerator; long uid = uidGenerator.getUID(); // 解析UID ParseUid parseUid = uidGenerator.parseUID(uid);
Tinyid(滴滴)
基于数据库号段模式的ID生成器。
<dependency>
<groupId>com.xiaoju.uemc</groupId>
<artifactId>tinyid-client</artifactId>
<version>1.0.0</version>
</dependency>
// 获取分布式ID
Long id = TinyId.nextId("test");
// 批量获取
List<Long> ids = TinyId.nextId("test", 10);
CosId
国产开源项目,支持多种生成模式。
<dependency>
<groupId>me.ahoo.cosid</groupId>
<artifactId>cosid-core</artifactId>
<version>2.0.0</version>
</dependency>
// 雪花算法 IdGenerator snowflakeIdGenerator = new SnowflakeIdGenerator(1); long id = snowflakeIdGenerator.generate(); // 号段模式 SegmentId segmentId = new SegmentId(); long id = segmentId.generate();
Redis生成方案
// 使用Redis原子操作
@Autowired
private StringRedisTemplate redisTemplate;
public long generateId(String key) {
return redisTemplate.opsForValue().increment(key, 1);
}
// 批量获取
public List<Long> batchGenerateId(String key, int size) {
// 使用Redis的incrBy
Long start = redisTemplate.opsForValue().increment(key, size);
return LongStream.range(start - size + 1, start + 1)
.boxed().collect(Collectors.toList());
}
ZooKeeper生成方案
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.5.0</version>
</dependency>
public class ZookeeperIdGenerator {
private CuratorFramework client;
public long generateId(String path) throws Exception {
// 使用ZNode的版本号作为ID
Stat stat = client.checkExists().forPath(path);
return stat.getVersion();
}
}
推荐选择
- 单机部署:Hutool的雪花算法
- 集群部署:Leaf或CosId
- 高并发场景:UidGenerator
- 简单需求:Redis方案
这些方案都已经在生产环境中验证,可以根据具体需求选择最适合的。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播