yitter / IdGenerator

💎多语言实现,高性能生成唯一数字ID。 💎优化的雪花算法(SnowFlake)——雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力(50W/0.1s)。 💎原生支持 C#/Java/Go/Rust/C/JavaScript/TypeScript/Python/Pascal 多语言,提供其它适用于其它语言的多线程安全调用动态库(FFI)。💎支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。💎顶尖优化,超强效能。
MIT License
2.59k stars 371 forks source link

IIS下,多个工作进程,ID重复该如何解决 #72

Closed cuizhexin closed 10 months ago

cuizhexin commented 1 year ago

1、此现象出现场景 :.NetCore 6.0 部署在IIS下,应用池设置多个工作进程 2、 代码: 初始化时配置了workID // 配置雪花Id算法机器码 YitIdHelper.SetIdGenerator(new IdGeneratorOptions { SeqBitLength = 10, WorkerId = 8 // 取值范围0~63,默认1 });

在大批量非多线程插入时,调用 YitIdHelper.NextId()出现重复

yitter commented 1 year ago

可以通过以下动态库,动态注册 WorkerId:

https://github.com/yitter/IdGenerator/releases/download/v1.3.3/workeridgo_lib_v1.3.3.zip

// 注册一个 WorkerId,会先注销所有本机已注册的记录 // address: Redis连接地址,单机模式示例:127.0.0.1:6379,哨兵/集群模式示例:127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382 // password: Redis连接密码 // db: Redis指定存储库,示例:1 // sentinelMasterName: Redis 哨兵模式下的服务名称,示例:mymaster,非哨兵模式传入空字符串即可 // minWorkerId: WorkerId 最小值,示例:30 // maxWorkerId: WorkerId 最大值,示例:63 // lifeTimeSeconds: WorkerId缓存时长(秒,3的倍数),推荐值15 extern GoInt32 RegisterOne(char server, char password, GoInt32 db, char* sentinelMasterName, GoInt32 minWorkerId, GoInt32 maxWorkerId, GoInt32 lifeTimeSeconds);