zoukankan      html  css  js  c++  java
  • 高并发下怎么生成唯一订单号

    方案一:

      如果没有并发的话,订单号只在一个线程中产生,不同订单的时间戳不同,    

            时间戳+随机数(自增数)区分订单

       如果有并发的话,并且订单号在同一台主机产生多个进程,只要把进程的ID添加到序列号中就可以保证订单号唯一。

         如果有并发,订单在不同主机中,把IP地址  CPU序列号  能区分的号码添加到序列号中就能保证唯一。

     

     方案二: 

           时间戳+用户ID+随机数+乐观锁

    方案三: 

       可以用redis的原子递增,做高可用集群

    方案四:

       java自带的UUID

    实例代码

                     java中获取线程ID

      Thread.currentThread().getId()

                     java 获取进程 ID

      1. //java获取进程ID 2. RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); 3. Field jvm = runtime.getClass().getDeclaredField("jvm"); 4. jvm.setAccessible(true); 5. VMManagement mgmt = (VMManagement) jvm.get(runtime); 6. Method pidMethod = mgmt.getClass().getDeclaredMethod("getProcessId"); 7. pidMethod.setAccessible(true); 8. int pid = (Integer) pidMethod.invoke(mgmt);

          java 获取 mac 地址

      1. InetAddress ia = InetAddress.getLocalHost(); 2. byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress(); 3. String macStr = DatatypeConverter.printHexBinary(mac);

         

  • 相关阅读:
    当最好的朋友背叛你的时候
    那就这样沉沦??
    Struts初步知识JSP实例学习教程
    结合struts和hibernate谈J2EE架构的数据表示
    创建 Controller
    对话:关于架构、设计与需求
    Struts 应用转移到 Struts 2 一
    Struts 应用转移到 Struts 2 二
    出现空白网页可能的原因
    jsp常用功能模块JSP实例学习教程
  • 原文地址:https://www.cnblogs.com/jianchileiliang/p/6796590.html
Copyright © 2011-2022 走看看