首页 » PHP教程 » phpguid防止反复技巧_ABP中Guid连续是若何实现的

phpguid防止反复技巧_ABP中Guid连续是若何实现的

duote123 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

Abp 5.0该当在.Net 6(11.09)发布后,同步发布正式版.看Abp源码是没有对Guid进行修正.

最近一贯在学习Abp框架干系的知识,在Abp文档上看到通过IGuidGenerator接口Create方法实现的GUID是连续的.便想看看内部是如何实现的.

phpguid防止反复技巧_ABP中Guid连续是若何实现的

Create源码学习(裁剪部分代码)

var random = RandomNumberGenerator.Create();var randomBytes = new byte[10];random.GetBytes(randomBytes);long timestamp = DateTime.UtcNow.Ticks / 10000L;// Then get the bytesbyte[] timestampBytes = BitConverter.GetBytes(timestamp);// Since we're converting from an Int64, we have to reverse on// little-endian systems.if (BitConverter.IsLittleEndian) //判断是否为小端 { //这涉及到cpu机构 x86为小端 arm支持大端序和小端序 Array.Reverse(timestampBytes);}byte[] guidBytes = new byte[16];//通过Buffer.BlockCopy进行内容拷贝,性能更好//内部是利用Memmove 将数组转为指针,进行干系内容进行拷贝的Buffer.BlockCopy(randomBytes, 0, guidBytes, 0, 10);Buffer.BlockCopy(timestampBytes, 2, guidBytes, 10, 6);var guid = new Guid(guidBytes);//这里只是打印guid内容Console.WriteLine(guid.ToString());

看到上面的代码,可以大略地分为以下几个步骤:

phpguid防止反复技巧_ABP中Guid连续是若何实现的
(图片来自网络侵删)

1. 创建一个长度为10的byte数组,存放随机数.

2. 获取当前韶光的毫秒数

3. 判断是否为小端,如果为小端,则把韶光的毫秒数进行反转

4. 创建长度为16的byte,将随机数拷贝该数组,然后将韶光毫秒数也拷贝到该数组中

5. 通过Guid的布局函数,传入长度16的数组,进行天生连续的Guid

如果您以为对您有用的话,可以点个赞或者加个关注,欢迎大家一起进行技能互换

标签:

相关文章

php关于文本上传技巧_php的文件上传

这里首先声明一下这一章的内容比较多,比较难,你要抱着和自己去世磕的态度。细微之处不放过,多敲多练是王道。 学习就像爬山,得一步一步...

PHP教程 2024-12-12 阅读0 评论0