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

C#版本的国外朋友已经封装了,大家可以去看看:https://github.com/ccollie/snowflake-net

强大的网友出来个简化版本:http://blog.csdn.net/***/article/details/*** (地址我就不贴了,对前辈需要最起码的尊敬)

一开始我用的是这个简化版本,后来发现有重复项。。。(demo:https://github.com/dunitian/TempCode/tree/master/2016-11-16/Twitter_Snowflake)

全局ID的激烈讨论:https://q.cnblogs.com/q/53552/

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

源码地址:https://github.com/dunitian/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< long > set = new HashSet< long >();
         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⊙)…,举个例子:

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

 

完整调用demo:(https://github.com/dunitian/snowflake-net/tree/master/Demo)

 core:(https://github.com/dunitian/snowflake-net/tree/master/Demo.Core)

原文地址:http://www.cnblogs.com/dunitian/p/6130543.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发包:ConcurrentMap

转载自 Java并发包&#xff1a;ConcurrentMap 文章译自&#xff1a;http://tutorials.jenkov.com/java-util-concurrent/index.html 抽空翻译了一下这个教程的文章&#xff0c;后面会陆续放出&#xff0c;如有不妥&#xff0c;请批评指正。 转自请注明出处。 之前漏了一篇文…

SecureCRT的下载、安装( 过程非常详细!!值得查看)

我自己百度联通主号有存储了 可以下下来 有视频加这个文档 就可以了 https://blog.csdn.net/qq_39052513/article/details/100272502 SecureCRT的下载、安装&#xff08; 过程非常详细&#xff01;&#xff01;值得查看&#xff09; 置顶 超Ren专属 2020-06-02 21:29:33 1…

整合Druid---SpringBoot

整合Druid(数据源) Druid简介 Java程序很大一部分要操作数据库&#xff0c;为了提高性能操作数据库的时候&#xff0c;又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现&#xff0c;结合了 C3P0、DBCP 等 DB 池的优点&#xff0c;同时加入了日志…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——工具类

次此篇文章是两个工具类的实现&#xff0c;HibernateUtil.java和分页的工具类PageUtil.java的实现&#xff1a; 先看看HibernateUtil.java的实现&#xff1a; package org.util;import javax.transaction.Transaction;import org.hibernate.Session; import org.hibernate.Sess…

理想的互联网服务后台框架的九个要点

理想的互联网服务后台框架的九个要点对于互联网服务后台团队&#xff0c;开发框架的选择是非常关键的一个问题&#xff0c;多年的海量服务经验和教训使得我们团队深刻的认识到&#xff1a; 要尽早规范团队的开发服务框架&#xff0c;避免到了后期&#xff0c;各种开发语言混杂、…

linux 无线网卡驱动桥转发,引用和完美转发

# 右值引用 移动语意~~~右值引用解决了左值引用无法传递临时对象和常引用传递的对象只读的问题. 右值引用允许传递一个可变的临时对象引用.移动构造使用移动而非赋值语义完成构造过程, 主要用于解决函数返回值时的大量深拷贝开销.#include int main(void){int a 30;int &b…

虚拟机安装centeros7 无法连接网络 virsh命令找不到 删除多余的vir0 不然dubbo会有问题

进入linux ping www.baidu.com 无法访问 cd /etc/sysconfig/network-scripts vi ifcfg-ens33 修改这个文件 onbootyes 原来是on shutdown -h now 关机 然后重启虚拟机 再次ping ping www.baidu.com 就通了 https://www.zhihu.com/question/53708440 virsh命令找…

Java集合之EnumSet

转载自 Java集合之EnumSet EnumSet EnumSet 是一个专为枚举设计的集合类&#xff0c;EnumSet中的所有元素都必须是指定枚举类型的枚举值&#xff0c;该枚举类型在创建EnumSet时显式或隐式地指定。 EnumSet的集合元素也是有序的&#xff0c;EnumSet以枚举值在Enum类内的定义顺…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现

此过滤器的功能就是让Session始终保持着一个打开的状态&#xff1a; /** * Title: OpenSessionFilter.java * Package org.web * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-4-19 下午6:51:37 * version V1.0 */ pa…

yaml配置文件整合Mybatis易错点

配置 mybatis:type-aliases-package: com.kuang.pojomapper-locations: classpath:mybatis/mapper/*.xml容易写成以下格式导致出错 mybatis:type-aliases-package: com.kuang.pojomapper-locations: classpath: mybatis/mapper/*.xml

Azure 部署 Asp.NET Core Web App

在云计算大行其道的时代&#xff0c;当你在部署一个网站时&#xff0c;第一选择肯定是各式各样的云端服务。那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core 的网站呢&#xff1f;Azure 的 Web App 服务是个很好的选择。 下面我们会通过 Visual Studio…

联想linux笔记本评测,联想(lenovo)G460AL-ITH Linux笔记本电脑CPU测试评测-ZOL中关村在线...

这颗英特尔最新的Core i5 430M双核心处理器基于32nm工艺&#xff0c;核心代号为Arrandate&#xff0c;主频为2.27GHz&#xff0c;共享的三级缓存为3MB。在开启睿频加速时&#xff0c;单核心的主频最高为2.53GHz&#xff0c;并且支持同步超线程技术。同时除了支持上一代处理器所…

SecureCRT连接Linux的操作步骤

https://www.cnblogs.com/Koma-vv/p/11100565.html SecureCRT连接Linux的操作步骤 虚拟机待机&#xff1a;Ctrlg进入 ipconfig是Windows里面的操作 ifconfig是Linux里面的操作 解决方法&#xff1a;右键&#xff1a; 打开终端是&#xff1a;在桌面上&#xff0c;鼠标右键才可…

聊聊并发(四)深入分析ConcurrentHashMap

转载自 聊聊并发&#xff08;四&#xff09;深入分析ConcurrentHashMap 术语定义 术语英文解释哈希算法hash algorithm是一种将任意内容的输入转换成相同长度输出的加密方式&#xff0c;其输出被称为哈希值。 哈希表hash table根据设定的哈希函数H(key)和处理冲突方法将一组…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面

由于要导入好多js文件和cs文件&#xff0c;并且每个页面都需要导入&#xff0c;所以我把公共的导入js和css文件放在了一个jsp里面&#xff0c;在用到的里面直接导入即可&#xff0c; 此项目用到的js文件下载&#xff1a;这里 用到的css文件的下载&#xff1a;这里 公共的导…

整合MyBatis---SpringBoot

整合MyBatis 官方文档&#xff1a;http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/ Maven仓库地址&#xff1a;https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter/2.1.1 整合测试 1、导入 MyBatis 所需…

c语言 葬礼分号,其实从C语言用分号结尾开始,就是一个悲剧了……

……我该说啥好呢&#xff0c;不懂 pascal 的是你http://www.freepascal.org/docs-html/ref/refsu46.html#x138-14800013.2.1http://www.freepascal.org/docs-html/ref/refsu48.html#x140-15000013.2.3http://www.dragonkiller.nl/Delphi/delphi2009.html#StatementListpascal …

IDEA 底部工具栏没有 Version Control 解决办法

IDEA 底部工具栏没有 Version Control 解决办法 百度了半天 都说VCS配置不对 但是默认IDEA是配置好的 根本不需要修改 忽然看到 工具栏的快捷键 于是 Alt 9 就出现了 完美

一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

2008年11月&#xff0c;我在博客园开通了个人帐号&#xff0c;并在博客园发表了自己的第一篇博客。当然&#xff0c;我写博客也不是从2008年才开始的&#xff0c;在更早时候&#xff0c;也在CSDN和系统分析员协会&#xff08;之后名为“希赛网”&#xff09;个人空间发布过一些…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类

主要的业务操作都在这个struts的Action里面&#xff0c;大家来看看&#xff1a; /** * Title: EmpAction.java * Package org.web * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-4-19 下午8:37:00 * version V1.0 */…