大家好,我是宝弟!
今天给大家推荐一个雪花算法中非常好用的数字ID生成器IdGenerator。
IdGenerator是一款基于Snowflake算法的高性能唯一数字ID生成器,适用于分布式系统中的ID生成。IdGenerator优化的雪花算法—雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力(50W/0.1s)。IdGenerator原生支持 C#/Java/Go/Rust/C/JavaScript/TypeScript/Python/Pascal 多语言,提供适用于其它语言的多线程安全调用动态库(FFI)。支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。.
IdGenerator特点
-
整形数字,随时间单调递增(不一定连续),长度更短,用50年都不会超过 js Number类型最大值。(默认配置)
-
速度更快,是传统雪花算法的2-5倍,0.1秒可生成50万个(基于8代低压i7)。
-
支持时间回拨处理。比如服务器时间回拨1秒,本算法能自动适应生成临界时间的唯一ID。
-
支持手工插入新ID。当业务需要在历史时间生成新ID时,用本算法的预留位能生成5000个每秒。
-
不依赖任何外部缓存和数据库。(k8s环境下自动注册 WorkerId 的动态库依赖 redis)
基础功能,开箱即用,无需配置文件、数据库连接等。
IdGenerator的性能问题
关于IdGenerator的性能问题,以下给出3组最佳实践配置:
-
如果生成ID速度不超过5W/s,不用修改任何配置参数
-
如果生成ID速度超过5W/s,低于50W,推荐修改:SeqBitLength=10
-
如果生成ID速度超过50W/s,接近500W,推荐修改:SeqBitLength=12
总之,增加 SeqBitLength 会让性能更高,但生成的 ID 也会更长。
IdGenerator算法介绍
-
这是优化的雪花算法(雪花漂移),它生成的ID更短、速度更快。
-
支持 k8s 等容器环境自动扩容(自动注册 WorkerId),可在单机或分布式环境生成数字型唯一ID。
-
原生支持 C#/Java/Go/C/Rust/Python/Node.js/PHP(C扩展)/SQL/ 等语言,并提供多线程安全调用动态库(FFI)。
-
兼容所有雪花算法(号段模式或经典模式,大厂或小厂),将来你可做任意的升级切换。
-
这是计算机历史上最全面的雪花ID生成工具。【截至2022年8月】
IdGenerator已实现的语言
C# 、Java、Go、Rust、Python、C、C (PHP扩展)、Delphi (Pascal)、JavaScript、TypeScript、V、D
IdGenerator 在C#、.NET中的使用
IdGenerator 在C# .NET中的运行环境:.NET Standard 2.0+ (支持:.net framework4.6.1+/.net core 2.0+/.net5/.net6+/mono5.4+/Unity 2018+/Xamarin/)
引用 nuget 包
dotnet add package Yitter.IdGenerator --version 1.0.14
//或
NuGet\Install-Package Yitter.IdGenerator -Version 1.0.14
基本使用方法:
在应用启动时,全局初始化一次
var options = new IdGeneratorOptions(Your_Unique_Worker_Id);
// 保存参数(务必调用,否则参数设置不生效):
YitIdHelper.SetIdGenerator(options);
// 初始化后,在任何需要生成ID的地方,调用以下方法:
var newId = YitIdHelper.NextId();
.NET 中的使用方法
1、ConfigureServices中注册
public void ConfigureServices(IServiceCollection services)
{
// 配置雪花Id算法
YitIdHelper.SetIdGenerator(new IdGeneratorOptions
{
WorkerId = 1// 取值范围0~63,默认1
});
}
2、.NET 7及以上可以在Program.cs中进行注册:
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseIdHelper()
//UseIdHelper 扩展
public static IHostBuilder UseIdHelper(this IHostBuilder hostBuilder)
{
hostBuilder.ConfigureServices((buidler, services) =>
{
var options = new IdGeneratorOptions(buidler.Configuration["WorkerId"].ToUshort());
YitIdHelper.SetIdGenerator(options);
});
return hostBuilder;
}
可以在任意需要雪花ID的地方使用
var newId = YitIdHelper.NextId();
资源获取方式
https://github.com/yitter/IdGenerator