C#中的IDGen是一个非常实用的C#实现的Twitter Snowflake算法的ID生成器,它能够为C#应用程序提供高效、全局唯一的ID生成功能,特别是在高并发场景下,这个功能尤为重要。
Twitter Snowflake算法是一种非常棒的方法,用于生成全世界独一无二的ID。它基于当前时间和机器时钟的微秒级别差异,可以保证在1亿年内生成的ID都是独一无二的。这个算法非常适合在高并发的场景下使用,因为它能够避免出现ID冲突,从而提高系统的性能和稳定性。
在C#中,IDGen就是一个基于Twitter Snowflake算法实现的ID生成器。它的主要作用是为C#应用程序生成全局唯一的ID,可以通过简单的调用来实现。与其他ID生成器相比,IDGen具有以下优点:
nuget 安装 IDGen库
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);
}
}
}
这个Id在asp.net 项目中有个比较麻烦的问题,在前后端分离时js默认对于数字类型大于17位的会格式化,导致数字会变。由于 JavaScript 中 Number
类型的自身原因,并不能完全表示 Long
型的数字,在 Long
长度大于17
位时会出现精度丢失的问题。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!