zoukankan      html  css  js  c++  java
  • 高并发下的Id生成器

    考虑到sql server以及c#,最多只能用decimal类型,也就是29位的数字,做了下面这个数字型id生成器:

    class Program
        {
            static void Main(string[] args)
            {
                int i = 100000;
                Timing t = new Timing();
    
                t.Start();
                while(i-->0)
                    UniqueIdGenerator.Next();
                t.Stop();
    
                t.Display("");
            }
            
        }
    
        public static class UniqueIdGeneratorHelper
        {
            public static long IP2Long(String strIP)
            {
                long[] ip = new long[4];
                string[] s = strIP.Split('.');
                ip[0] = long.Parse(s[0]);
                ip[1] = long.Parse(s[1]);
                ip[2] = long.Parse(s[2]);
                ip[3] = long.Parse(s[3]);
                return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
            }
        }
    
        public static class UniqueIdGenerator
        {
            static UniqueIdGenerator()
            {
                ip = UniqueIdGeneratorHelper.IP2Long("192.168.1.21");//需要自己从配置文件中读取
            }
    
            private static long ip=0;
            public static decimal Next()
            {
                return decimal.Parse(DateTime.Now.ToString("yyyyMMddHHmmssff") + ip.ToString() + GetSequence().ToString());
            }
    
            private static int curSeq = 1;
            private static object o = 1;
            private static int GetSequence()
            {
                lock (o)
                {
                    if (curSeq > 999)
                        curSeq = 1;
                    return curSeq++;
                }
            }
        }

     

     十万次请求,花了半秒不到,应该还行。

  • 相关阅读:
    汉诺塔问题
    两个有序链表序列的合并
    数列求和
    求集合数据的均方差
    [NOIP2014] 提高组 洛谷P1328 生活大爆炸版石头剪刀布
    [NOIP2014] 普及组
    洛谷P1726 上白泽慧音
    洛谷P1808 单词分类
    洛谷P1889 士兵站队
    洛谷P1288 取数游戏II
  • 原文地址:https://www.cnblogs.com/aarond/p/IdGenerator.html
Copyright © 2011-2022 走看看