Elight.Utility/Other/SnowFlakeHelper.cs

(开头部分) 7KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Elight.Utility.Other
{
    public class SnowFlakeHelper
    {

        private static readonly object _obj = new object();
        private static SnowFlakeHelper Instance;
        private SnowFlakeHelper()
        {

        }

        /// <summary>
        /// 获取雪花帮助类对象
        /// </summary>
        /// <param name="datacenterId">数据中心ID</param>
        /// <param name="workerId">工作机器Id</param>
        /// <returns></returns>
        public static SnowFlakeHelper GetSnowInstance(long datacenterId = 1, long workerId = 1)
        {
            //双if 加锁
            if (Instance == null)
            {
                lock (_obj)
                {
                    if (Instance == null)
                    {
                        Instance = new SnowFlakeHelper(datacenterId, workerId);
                    }
                }
            }

            return Instance;
        }

        // 开始时间截((new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc)-Jan1st1970).TotalMilliseconds)
        private const long twepoch = 1577836800000L;

        // 机器id所占的位数
        private const int workerIdBits = 5;

        // 数据标识id所占的位数
        private const int datacenterIdBits = 5;

        // 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数)
        private const long maxWorkerId = -1L ^ (-1L << workerIdBits);

        // 支持的最大数据标识id,结果是31
        private const long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);

        // 序列在id中占的位数
        private const int sequenceBits = 12;

        // 数据标识id向左移17位(12+5)
后面还有 143 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。