C# 生成系统唯一号
生成唯一号:思路,根据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# 生成系统唯一号相关推荐
- 高并发分布式系统中生成全局唯一(订单号)Id
2019独角兽企业重金招聘Python工程师标准>>> 高并发分布式系统中生成全局唯一(订单号)Id 1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的 ...
- 高并发分布式系统中生成全局唯一订单号
高并发分布式系统中生成全局唯一订单号 我了解的方案如下-------------------------- 1. 使用数据库自增Id 优势:编码简单,无需考虑记录唯一标识的问题. 缺陷: 1) ...
- 汉语著者号自动生成系统的设计与实现
汉语著者号自动生成系统的设计与实现 李 华 (成都大学图书馆 成都610106) [摘要] 以著者的四角号码为取号依据,设计编写"汉语著者号自动生成系统",对该系统测试后发现,编 ...
- 如何在分布式场景下生成全局唯一 ID ?
作者 l 会点代码的大叔(CodeDaShu) 在分布式系统中,有一些场景需要使用全局唯一 ID ,可以和业务场景有关,比如支付流水号,也可以和业务场景无关,比如分库分表后需要有一个全局唯一 ID,或 ...
- 滴滴开源的分布式id生成系统
ID Generator id生成器 分布式id生成系统,简单易用.高性能.高可用的id生成系统 简介 Tinyid是用Java开发的一款分布式id生成系统,基于数据库号段算法实现,关于这个算法可以参 ...
- SpringBoot 雪花算法生成商品订单号【SpringBoot系列13】
SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCl ...
- 【阅读】Leaf——美团点评分布式ID生成系统
文章目录 背景 常见实现方案 UUID 优势 缺点 应用 类SnowFlake方案 优点 缺点 应用 数据库生成 优点 缺点 MySQL 增强版 优点 缺点 Leaf -segment方案 优点 缺点 ...
- 带你了解「美团、百度和滴滴」的分布式 ID 生成系统
文章目录 美团 背景 常见方法介绍 UUID 类snowflake方案 数据库生成 Leaf 方案实现 Leaf-segment 数据库方案 双 buffer 优化 Leaf 高可用容灾 Leaf-s ...
- 如何在高并发分布式系统中生成全局唯一Id
又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上.最近还写了一个发邮件的组件以及性能测试请看 <NET开发邮件发送功能的全面教程(含邮件组件源码)> ,还弄了 ...
最新文章
- linux下ping不通问题的说明与解决(DNS配置丢失)
- 第六章---机器学习与数据建模
- 是哪个机场_南宁和昆明哪个更强?南宁城建强于昆明,昆明经济强于南宁
- linux mysql设置编码_linux下修改mysql编码
- 权限操作-springSecurity快速入门-使用自定义页面
- 菜鸟小编对云计算的一点猜想
- 用html做qq会员页面导航,untitledQQ会员页面导航3.html
- 免费硬件、万元奖池、百度内推,AI达人创造营邀你出战!
- pl/sql的存储过程
- linux-ssh免密登录
- 基于IPS7LnkNet.Advanced的S7Watch 西门子PLC调试工具
- Forth 系统实现
- 【2019年04月10日】股票的滚动市盈率PE最低排名
- springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码)
- 什么是4:4:4、4:2:2、4:2:0?了解图像压缩取样的方式
- 指数分布c语言,C语言下泊松分布以及指数分布随机数生成器实现
- 多功能悬浮球下载_fv悬浮球下载-FV悬浮球 安卓版v1.4.5-PC6安卓网
- 【Ware】免费的格式转换软件推荐
- 2022最新知识付费变现小程序+卡密独立版
- selenium 教程 java_java selenium教程环境搭建方法
热门文章
- 服务器可以响应字符类型的数据吗,HTTP - Response
- windows7 php 无法启动服务,windows update服务无法启动怎么解决?
- 交换排序图解_图解简单选择排序
- android 蓝牙找不到电脑,Android6.0 蓝牙搜索不到设备原因
- java 报文长度计算_从TcpClient.GetStream()读取而不知道长度 - java
- python控制手机发短信_python-在python3中使用容联云通讯发送短信验证码
- 集合处理后,按原先输入的字符串顺序排序
- 线程安全之strtok()函数
- mysql right join实例_mysql left join,right join,inner join简单实例
- html 高德地图坐标,百度地图,高德地图,HTML5经纬度比较