栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

id长度 雪花算法

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

id长度 雪花算法

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

测试用例:

测试代码:

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⊙)…,举个例子:

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

IdWorker.Init().NextId()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/910252.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号