🚀 基于 didi/tinyid 的现代化重构版本
Tinyid 是一个高性能的分布式 ID 生成服务,提供 REST API 和 Java 客户端。使用 Java 客户端时,单实例 QPS 可达 1000 万+。
本项目 Fork 自 didi/tinyid,进行了以下现代化升级:
| 特性 | 原版本 | 重构版本 |
|---|---|---|
| JDK | JDK 8 | JDK 17+ |
| Spring Boot | 1.x / 2.x | 3.5.x |
| Web 容器 | Tomcat | Undertow(高性能) |
| MySQL 驱动 | mysql-connector-java | mysql-connector-j |
| 日志框架 | Log4j | Log4j2 |
- ✅ 现代化技术栈 - 使用最新的 Spring Boot 3.5.x 和 JDK 17
- ✅ 更高性能 - Undertow 容器提供更好的并发性能
- ✅ 安全性 - 依赖库更新至最新版本,修复已知安全漏洞
- ✅ 长期维护 - 基于 LTS 版本的 JDK,获得长期支持
git clone https://github.com/why168/tinyid.git
cd tinyidcd tinyid-server
mysql -u root -p < db.sql编辑 tinyid-server/src/main/resources/offline/application.properties:
datasource.tinyid.names=primary
datasource.tinyid.primary.driver-class-name=com.mysql.cj.jdbc.Driver
datasource.tinyid.primary.url=jdbc:mysql://localhost:3306/tinyid?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
datasource.tinyid.primary.username=root
datasource.tinyid.primary.password=your_passwordcd tinyid-server
sh build.sh offline
java -jar output/tinyid-server-1.0.0-SNAPSHOT.jar服务默认运行在 http://localhost:9999
curl 'http://localhost:9999/tinyid/id/nextId?bizType=test&token=0f673adf80504e2eaa552f5d791b644c'响应:
{
"data": [
2
],
"code": 200,
"message": ""
}curl 'http://localhost:9999/tinyid/id/nextIdSimple?bizType=test&token=0f673adf80504e2eaa552f5d791b644c'响应:
3curl 'http://localhost:9999/tinyid/id/nextIdSimple?bizType=test&token=0f673adf80504e2eaa552f5d791b644c&batchSize=10'响应:
4,5,6,7,8,9,10,11,12,13配置 bizType=test_odd(delta=2, remainder=1):
curl 'http://localhost:9999/tinyid/id/nextIdSimple?bizType=test_odd&batchSize=10&token=0f673adf80504e2eaa552f5d791b644c'响应:
3,5,7,9,11,13,15,17,19,21<dependency>
<groupId>com.xiaoju.uemc.tinyid</groupId>
<artifactId>tinyid-client</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>在 classpath 下创建 tinyid_client.properties:
tinyid.server=localhost:9999
tinyid.token=0f673adf80504e2eaa552f5d791b644c
# 多服务器配置示例
# tinyid.server=ip1:port1,ip2:port2import com.xiaoju.uemc.tinyid.client.utils.TinyId;
// 获取单个 ID
Long id = TinyId.nextId("test");
// 批量获取 ID
List<Long> ids = TinyId.nextId("test", 10);tinyid/
├── tinyid-base/ # 核心基础模块
├── tinyid-client/ # Java 客户端
├── tinyid-server/ # HTTP 服务端
└── doc/ # 文档资源
欢迎提交 Issue 或 Pull Request!
本项目基于 Apache License 2.0 开源。
本项目是基于 didi/tinyid 的个人 Fork 版本,非官方维护版本。原项目版权归滴滴出行所有。