id长度 雪花算法_关于全局ID,雪花(snowflake)算法的说明

2dd4e4b5e0d366d5fc8dccc97fd5d75f.png

之后在外国大牛的基础上重写修改了部分内容(https://github.com/ccollie/snowflake-net),添加了一些注解等【支持Core】。现在是可以去Nuget直接下载使用的:Snowflake.Net

e876f52df80fbf7ec2edc1304058c401.png

测试用例:

edad3d54948c6ccadc5311c5d8fa214f.png

测试代码:

using System;

using System.Collections.Generic;

using System.Threading;

using System.Threading.Tasks;

using Snowflake.Net;

namespace Snowflake.ZConsole

{

class Program

{

private static int N = 2000000;

private static HashSet set = new HashSet();

private static IdWorker worker = new IdWorker(1, 1);

private static int taskCount = 0;

static void Main(string[] args)

{

Task.Run(() => GetID());

Task.Run(() => GetID());

Task.Run(() => GetID());

Task.Run(() => Printf());

Console.ReadKey();

}

private static void Printf()

{

while (taskCount != 3)

{

Console.WriteLine("...");

Thread.Sleep(1000);

}

Console.WriteLine(set.Count == N * taskCount);

}

private static object o = new object();

private static void GetID()

{

for (var i = 0; i < N; i++)

{

var id = worker.NextId();

lock (o)

{

if (set.Contains(id))

{

Console.WriteLine("发现重复项 : {0}", id);

}

else

{

set.Add(id);

}

}

}

Console.WriteLine($"任务{++taskCount}完成");

}

}

}

可能有些人只关心以后怎么用?==》

IdWorker worker = new IdWorker(1, 1); //大并发的情况下,减少new的次数可以有效避免重复的可能

var id = worker.NextId();

有可能上面的减少new有些同志不太懂,(⊙o⊙)…,举个例子:

测试代码不变的情况下,改这么一句:

d6c6251335bfa105926ae6fda3123dcd.png

3a01cba58cd160d23a2040e7e3626d0b.png

e80ead9391607cb508a9883826428830.png

dc6433bbac6e1a3a637c8910c2854a8c.png

IdWorker.Init().NextId()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值