Identity自增序列/唯一断标识
用于在高并发环境中的自增序列维护和快速创建唯一不重复的短标识,该类是线程安全的
如在ORM组件中,创建唯一的参数名
特点:
高并发环境下的性能保证
创建的唯一标识较短且在一定条件下绝不重复
在特定环境中实用价值较高
缺点:
有上限限制,短时间内并发超过上限则会出现重复,理论上限值ulong.MaxValue,不过建议不要设置过高
/// <summary> 自增序列,最大0xFFFFFFF,超过0xFFFFFFF回归1
/// </summary>
public static class Identity
{
static volatile int _id = ;
/// <summary> 当前值
/// </summary>
public static int Current
{
get { return Identity._id; }
}
/// <summary> 获取一个id,每获取一次就会自增1,该方法在所有线程都是安全的
/// </summary>
public static int Next()
{
int i = System.Threading.Interlocked.Increment(ref _id);
if (i > (0xFFFFFFF))
{
i = i - 0xFFFFFFF;
System.Threading.Interlocked.Exchange(ref _id, i);
}
return i;
} //字符字典
static char[] _CharMap = new[]
{
'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
}; /// <summary> 获取一个id的String表示形式,每获取一次就会自增1,该方法在所有线程都是安全的
/// </summary>
public static string NextString()
{
int number = Next();
int length = (int)Math.Log(number, ) + ;//52比较合理,不要改了
char[] c = new char[length + ];
c[length] = '';
for (int i = length - ; i > ; i--)
{
c[i] = _CharMap[number % ];
number = number / ;
}
c[] = _CharMap[number];
return new string(c);
}
}
代码中的初始值是从0开始的. 为了方便看效果,我修改初始值,为0xFFFFFFC
Console.Write("初始值:");
Console.WriteLine(Identity.Current);
Console.WriteLine("==== 数字 ====");
Console.WriteLine(Identity.Next());
Console.WriteLine(Identity.Next());
Console.WriteLine(Identity.Next());
Console.WriteLine(Identity.Next());
Console.WriteLine(Identity.Next());
Console.WriteLine(Identity.Next());
Console.WriteLine(Identity.Next());
初始值:
==== 数字 ====
这里也修改了初始值
Console.Write("初始值:");
Console.WriteLine(Identity.Current);
Console.WriteLine("==== 字符 ====");
for (int i = ; i < ; i++)
{
Console.Write(Identity.NextString());
Console.Write("\t当前值:");
Console.WriteLine(Identity.Current);
}
初始值:268423164
==== 字符 ====
KLaVX0 当前值:268423165
KLaVY0 当前值:268423166
KLaVZ0 当前值:268423167
KLaWa0 当前值:268423168
KLaWb0 当前值:268423169
KLaWc0 当前值:268423170
KLaWd0 当前值:268423171
KLaWe0 当前值:268423172
KLaWf0 当前值:268423173
KLaWg0 当前值:268423174
KLaWh0 当前值:268423175
KLaWi0 当前值:268423176
KLaWj0 当前值:268423177
KLaWk0 当前值:268423178
KLaWl0 当前值:268423179
KLaWm0 当前值:268423180
KLaWn0 当前值:268423181
KLaWo0 当前值:268423182
KLaWp0 当前值:268423183
KLaWq0 当前值:268423184
https://code.csdn.net/snippets/104950
Identity自增序列/唯一断标识的更多相关文章
- 如何唯一的标识一台Android设备?
UUID : (Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.由以下几部分的组合:当前日期和时间(U ...
- android唯一设备标识、设备号、设备ID的获取方法
##如何获取Android设备唯一ID? ###问题 每一个android设备都有唯一ID吗?如果有?怎么用java最简单取得呢? ###回答1(最佳) 如何取得android唯一码? 好处: 1.不 ...
- UTI 唯一类型标识
本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6657231 applicationdocumentationtypessys ...
- ThreadStatic应用(Identity补完)
关于Identity Identity自增序列/唯一断标识 起初做这个东西,是在一个内部组件中,用于在高并发的环境下得到一个较短的“相对”不重复标识字符串;(这里说的相对是指一定的数量下不重复) 灵感 ...
- Identity
ThreadStatic应用(Identity补完) 关于Identity Identity自增序列/唯一断标识 起初做这个东西,是在一个内部组件中,用于在高并发的环境下得到一个较短的“相对”不重 ...
- 利用IFormattable接口自动参数化Sql语句
提要 string.Format("{0},{1}",a,b)的用法大家都不陌生了,在很多项目中都会发现很多sql语句存在这样拼接的问题,这种做法很多"懒"程序 ...
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
一.UDID (Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和 ...
- 设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识 zz
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
- [转]设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
随机推荐
- JiaThis分享插件的使用
jia This的下载地址:http://www.jiathis.com/ 只需要在页面上加上以下代码即可 <span class="jiathis_style"> & ...
- SQL数据库
SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出“做什么”的命令,“怎么做” ...
- MvcPager 免费开源分页控件3.0版发布!
MvcPager 3.0版在原2.0版的基础上进行了较大的升级,对MvcPager脚本插件重写并进行了大量优化.修复了部分bug并新增了客户端Javascript API等功能,使用更方便,功能更强大 ...
- 阿里云RDS for MySQL备份文件+binlog恢复过程中碰到的一些问题
1.一开始通过官方下载有的压缩包安装,碰到各种依赖问题,最后采用YUM安装 1.通过yum安装percona-Xtrabackup 1.1 先安装依赖: yum install perl-DBI yu ...
- 为Page添加INotifyPropertyChanged功能
在Page页面里面, DataContext 更新后,前台数据要求会自动更新. 但前台的绑定如果用x:bind 语法. 它要求强类型.直接关联到DataContext上就不行了. 需要为Page 添加 ...
- 「2014-2-23」Note on Preliminary Introduction to Distributed System
今天读了几篇分布式相关的内容,记录一下.非经典论文,非系统化阅读,非严谨思考和总结.主要的着眼点在于分布式存储:好处是,跨越单台物理机器的计算和存储能力的限制,防止单点故障(single point ...
- php面向对象学习
近期跟着别人开发一套php程序,深感自己面向对象很白痴,于是再次巩固了一下面向对象的学习,自己整理了一下这几天面向对象的东西,给大家分享!! 面向对象的三大特性: 封装 -- 隐藏内部实现,稳定外部接 ...
- eclipse中输入中文为繁体
http://blog.163.com/guomaolin_gavin/blog/static/199618307201218104452930/ eclipse中输入中文为繁体! 2012-02-0 ...
- 网上搜集了点资料,学web的人互相分享共同进步吧(php编码的好习惯必须养成)
网上搜集了点资料,学web的人互相分享共同进步吧 一.优秀的代码应该是什么样的? 优秀的PHP代码应该是结构化的.大段的代码应该被分割整理成一个个函数或方法,而那些不起眼的小段代码则应该加上注释,以便 ...
- 测试CAS
参考博客 http://www.cnblogs.com/adolfmc/archive/2012/07/16/2593291.html 准备工作: 1.cas服务器:http://cas:8443/l ...