生成唯一号:思路,根据yymmddhhmmss+自增长号+唯一服务器号( SystemNo)生成唯一码,总长度19,例如:1509281204550000101.

public class UniqueNumber
{
    private static long num = 0;//流水号
    private static object lockObj = new object();//锁
    /// <summary>
    /// 生成自增长码
    /// </summary>
    /// <returns></returns>
    private static  long GenerateUniqueNumber()
    {
        lock (lockObj)//加锁
        {
            num = num + 1;
            num = (num == 100000 ? 1 : num); //如果大于10W则从零开始,由于一台服务器一秒内不太可能有10W并发,所以yymmddhhmmss+num是唯一号。yymmddhhmmss+num+SystemNo针对多台服务器也是唯一号。
        }
        return num;
    }
    /// <summary>
    /// 获取唯一码
    /// </summary>
    /// <param name="SystemNo">系统号</param>
    /// <returns>唯一码</returns>
    public static long GetUniqueNumber(int SystemNo)
    {
        if (SystemNo > 99 || SystemNo < 1)
        {
            throw new Exception("系统号有误");
        }
        lock (lockObj)// 要使静态变量多并发下同步,需要两次加锁。
        {
            string time = DateTime.Now.ToString("yyMMddHHmmss");//12位;
            return long.Parse(time + GenerateUniqueNumber().ToString().PadLeft(5, '0') + SystemNo.ToString().PadLeft(2, '0'));//19位
        }
    }
}
 

测试:

static void Main(string[] args)
      {
          for (int i = 1; i < 98; i++)//N个线程
          {
              Thread thread = new Thread(new ParameterizedThreadStart(Exe));
              thread.Start(i);
          }
      }
      public static void Exe(object sysNo)
      {
          for (int i = 0; i < 1000; i++)//M次循环执行
          {
              long v = UniqueNumber.GetUniqueNumber((int)sysNo);
              DbHelperMySQL.ExecuteSql(" insert into abacus.guidtest (val) values ('" + v + "');");
          }
      }
mySQl脚本:
SELECT FROM abacus.guidtest;
select count(id) from abacus.guidtest;
select val from abacus.guidtest
group by val
having count(val) >1;
truncate table abacus.guidtest;
CREATE TABLE `guidtest`
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `val` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 

转载于:https://www.cnblogs.com/zhangzhi19861216/p/4839813.html

C# 生成系统唯一号相关推荐

  1. 高并发分布式系统中生成全局唯一(订单号)Id

    2019独角兽企业重金招聘Python工程师标准>>> 高并发分布式系统中生成全局唯一(订单号)Id 1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的 ...

  2. 高并发分布式系统中生成全局唯一订单号

    高并发分布式系统中生成全局唯一订单号 我了解的方案如下-------------------------- 1.  使用数据库自增Id 优势:编码简单,无需考虑记录唯一标识的问题. 缺陷: 1)    ...

  3. 汉语著者号自动生成系统的设计与实现

    汉语著者号自动生成系统的设计与实现 李 华 (成都大学图书馆 成都610106) [摘要] 以著者的四角号码为取号依据,设计编写"汉语著者号自动生成系统",对该系统测试后发现,编 ...

  4. 如何在分布式场景下生成全局唯一 ID ?

    作者 l 会点代码的大叔(CodeDaShu) 在分布式系统中,有一些场景需要使用全局唯一 ID ,可以和业务场景有关,比如支付流水号,也可以和业务场景无关,比如分库分表后需要有一个全局唯一 ID,或 ...

  5. 滴滴开源的分布式id生成系统

    ID Generator id生成器 分布式id生成系统,简单易用.高性能.高可用的id生成系统 简介 Tinyid是用Java开发的一款分布式id生成系统,基于数据库号段算法实现,关于这个算法可以参 ...

  6. SpringBoot 雪花算法生成商品订单号【SpringBoot系列13】

    SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCl ...

  7. 【阅读】Leaf——美团点评分布式ID生成系统

    文章目录 背景 常见实现方案 UUID 优势 缺点 应用 类SnowFlake方案 优点 缺点 应用 数据库生成 优点 缺点 MySQL 增强版 优点 缺点 Leaf -segment方案 优点 缺点 ...

  8. 带你了解「美团、百度和滴滴」的分布式 ID 生成系统

    文章目录 美团 背景 常见方法介绍 UUID 类snowflake方案 数据库生成 Leaf 方案实现 Leaf-segment 数据库方案 双 buffer 优化 Leaf 高可用容灾 Leaf-s ...

  9. 如何在高并发分布式系统中生成全局唯一Id

    又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上.最近还写了一个发邮件的组件以及性能测试请看 <NET开发邮件发送功能的全面教程(含邮件组件源码)> ,还弄了 ...

最新文章

  1. linux下ping不通问题的说明与解决(DNS配置丢失)
  2. 第六章---机器学习与数据建模
  3. 是哪个机场_南宁和昆明哪个更强?南宁城建强于昆明,昆明经济强于南宁
  4. linux mysql设置编码_linux下修改mysql编码
  5. 权限操作-springSecurity快速入门-使用自定义页面
  6. 菜鸟小编对云计算的一点猜想
  7. 用html做qq会员页面导航,untitledQQ会员页面导航3.html
  8. 免费硬件、万元奖池、百度内推,AI达人创造营邀你出战!
  9. pl/sql的存储过程
  10. linux-ssh免密登录
  11. 基于IPS7LnkNet.Advanced的S7Watch 西门子PLC调试工具
  12. Forth 系统实现
  13. 【2019年04月10日】股票的滚动市盈率PE最低排名
  14. springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码)
  15. 什么是4:4:4、4:2:2、4:2:0?了解图像压缩取样的方式
  16. 指数分布c语言,C语言下泊松分布以及指数分布随机数生成器实现
  17. 多功能悬浮球下载_fv悬浮球下载-FV悬浮球 安卓版v1.4.5-PC6安卓网
  18. 【Ware】免费的格式转换软件推荐
  19. 2022最新知识付费变现小程序+卡密独立版
  20. selenium 教程 java_java selenium教程环境搭建方法

热门文章

  1. 服务器可以响应字符类型的数据吗,HTTP - Response
  2. windows7 php 无法启动服务,windows update服务无法启动怎么解决?
  3. 交换排序图解_图解简单选择排序
  4. android 蓝牙找不到电脑,Android6.0 蓝牙搜索不到设备原因
  5. java 报文长度计算_从TcpClient.GetStream()读取而不知道长度 - java
  6. python控制手机发短信_python-在python3中使用容联云通讯发送短信验证码
  7. 集合处理后,按原先输入的字符串顺序排序
  8. 线程安全之strtok()函数
  9. mysql right join实例_mysql left join,right join,inner join简单实例
  10. html 高德地图坐标,百度地图,高德地图,HTML5经纬度比较