C# Guid长度雪花(snowflake)简单生成器

文章介绍了一个名为GuidSnowFlakeGenerator的类,它结合了雪花ID和GUID的优点,提供了一种128位的标识生成方案。该类允许在系统中灵活选择存储雪花ID或GUID,适应不同的数据库需求,如MySQL可能不支持GUID。类内部包含时间戳、工作ID和序列号,保证了唯一性,同时提供了时间提取方法。代码示例展示了如何生成和解析这种复合ID。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标准的long雪花长度为64bit,还要浪费1bit,然后41位时间,10位workid,12位序列

guid长度128位,64位完整的时间tick,32位workid,32位序列,可谓随便用满非常豪华

也就是系统里可以根据需要有的地方存随机guid,有的地方存雪花guid,随便换

随后还有提取时间的方法,由于是64位完整时间,直接拿出来转时间就好了

这个类参考别人的代码,如果需要设计更完善的guid雪花,可以在github上或者nuget上找newid这个项目,老外写好的更完善的做法

guid长度雪花继承雪花id所有优点和特点,只是长度略长

可以用guid存储,以往习惯guid的人没有压力,对guid支持较好的数据库就能支持好guid雪花,mysql不行

一个项目不同表可以使用不同策略,有的用guid,有的用雪花guid,按需使用,也更方便导数据

时间储存的完整long,可以提取出完整时间,时间照样从0年开始,再老的数据也可以导,只要按时间顺序,自己传个时间给next方法

序列号数量充足,不会动不动就加1秒,workid更长,可以分段放不同的内容

public class GuidSnowFlakeGenerator
    {
        readonly uint _c;
        int _a;
        int _b;
        long _lastTick;
        uint _sequence;

        SpinLock _spin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lmr廖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值