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

     

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

  • 相关阅读:
    线程模型及线程池原理
    Python装饰器
    CentOS下yum源配置
    Windows下右键增加Typora选项
    Python批量修改文件名
    《财务自由之路》读后感
    python字典练习01
    《亲密关系》读后感
    Git远程仓库
    《生命是什么》读后感
  • 原文地址:https://www.cnblogs.com/aarond/p/IdGenerator.html
Copyright © 2011-2022 走看看