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++;
                }
            }
        }

     

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

  • 相关阅读:
    今天面试一些程序员(新,老)手的体会
    UVA 10635 Prince and Princess
    poj 2240 Arbitrage
    poj 2253 Frogger
    poj 2485 Highways
    UVA 11258 String Partition
    UVA 11151 Longest Palindrome
    poj 1125 Stockbroker Grapevine
    poj 1789 Truck History
    poj 3259 Wormholes
  • 原文地址:https://www.cnblogs.com/aarond/p/IdGenerator.html
Copyright © 2011-2022 走看看