编辑
2025-09-25
C#
00

目录

摘要
正文

摘要

C#中的IDGen是一个非常实用的C#实现的Twitter Snowflake算法的ID生成器,它能够为C#应用程序提供高效、全局唯一的ID生成功能,特别是在高并发场景下,这个功能尤为重要。

Twitter Snowflake算法是一种非常棒的方法,用于生成全世界独一无二的ID。它基于当前时间和机器时钟的微秒级别差异,可以保证在1亿年内生成的ID都是独一无二的。这个算法非常适合在高并发的场景下使用,因为它能够避免出现ID冲突,从而提高系统的性能和稳定性。

在C#中,IDGen就是一个基于Twitter Snowflake算法实现的ID生成器。它的主要作用是为C#应用程序生成全局唯一的ID,可以通过简单的调用来实现。与其他ID生成器相比,IDGen具有以下优点:

  1. 高效:IDGen能够在高并发场景下生成高效、全局唯一的ID,可以避免ID冲突,提高系统的性能和稳定性。
  2. 全局唯一:IDGen生成的ID是全局唯一的,可以确保在任何时候都不会发生ID冲突。
  3. 支持多种数据类型:IDGen支持多种数据类型的ID生成,包括整数、字符串等,可以根据应用程序的需要进行灵活选择。
  4. 易于使用:IDGen非常易于使用,只需要简单的调用即可实现高效、全局唯一的ID生成。

正文

nuget 安装 IDGen库

image.png

CreateId()方法可以生成一个全局唯一的ID,由于IDGen使用了Twitter Snowflake算法,生成的ID长度为64位,其中时间戳占41位,数据中心ID占5位,机器ID占5位,序列号占12位。

C#
public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 取得一个id /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnGetOne_Click(object sender, EventArgs e) { var generator = new IdGenerator(0); var r = generator.CreateId(); MessageBox.Show(r.ToString()); } /// <summary> /// 批量取得id /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnBatch_Click(object sender, EventArgs e) { var generator = new IdGenerator(0); var lst=generator.Take(100).ToList(); foreach (var item in lst) { listBox1.Items.Add(item); } } }

image.png

这个Id在asp.net 项目中有个比较麻烦的问题,在前后端分离时js默认对于数字类型大于17位的会格式化,导致数字会变。由于 JavaScript 中 Number 类型的自身原因,并不能完全表示 Long 型的数字,在 Long 长度大于17位时会出现精度丢失的问题。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!