`
annan211
  • 浏览: 460892 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

高并发 生成订单号(一)

    博客分类:
  • java
 
阅读更多
1 设置主键自增为何不可取
这样的话,数据库本身是单点,不可拆库,因为id会重复。

2 依赖数据库自增机制达到全局ID唯一
使用如下语句:
REPLACE INTO Tickets64 (stub) VALUES ('a');
SELECT LAST_INSERT_ID();
这样可以保证全局ID唯一,但这个Tickets64表依旧是个单点。
  
3 依赖数据库自增机制达到全局ID唯一并消除单点
在2的基础上,部署两个(多个)数据库实例,
设置自增步长为2(多个则为实例数),即auto-increment-increment = 2
设置auto-increment-offset分别为1,2.....
这样第一台数据库服务器的自增id为 1 3 5 7 9
第二台为2 4 6 8 10

4 解决每次请求全局ID都读库写库压力过大的问题
比如第一次启动业务服务,会请求一个唯一id为3559
如果是2、3的方法,则id为3559,这样每次都请求数据库,对数据库压力比较大
可以用3559 * 65536(举个例子,并不一定是65536)+ 内存自增变量来作为id
当内存自增变量到达65535时,从数据库重新获取一个自增id
这样即使有多台业务服务器,id也不会重复:
第一台 3559 * 65536 + 1,2,3.....65535
第二台 3560 * 65536 + 1,2,3.....65535
然后第一台到65535了,换一个数据库自增id,这时候可能是3561 * 65536 + 1,2,3....

我们目前采用4

 请尊重知识,请尊重原创 更多资料参考请见  http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1

分享到:
评论

相关推荐

    高并发订单号生成工具类

    高并发订单号生成工具类,TWITTER编码方式可BAIDU

    SQL server高并发下生成唯一订单号的存储过程

    原理:按照一定规则生成订单号后,把订单号插入数据表后,再返回给用户,由于数据表设置了主键,也就是当数据表中存在一条一样的订单号时,是无法插入到数据表中,所以即使高并发情况下,也不会出现重复订单号

    MySQL高并发下生成唯一订单号的存储过程

    原理:按照一定规则生成订单号后,把订单号插入数据表后,再返回给用户,由于数据表设置了主键,也就是当数据表中存在一条一样的订单号时,是无法插入到数据表中,所以即使高并发情况下,也不会出现重复订单号

    订单号生成工具类

    2. **防止重复**:为了防止订单号重复,可以采用原子操作(如数据库的自增字段)来生成订单号的一部分,或者利用分布式锁确保同一时刻只有一个进程在生成订单号。此外,还可以通过哈希函数对生成的订单号进行校验,...

    JAVA生成订单号(日期+流水号)

    在Java编程中,生成订单号是一项常见的任务,特别是在电商或者交易系统中,每个订单都需要一个唯一的标识符。本文将详细讲解如何使用Java按照日期加流水号的方式生成订单号,并确保其递增性。 首先,订单号通常由...

    订单号的生成redis中获取

    在给定的标题“订单号的生成redis中获取”中,我们可以推断这是一个关于利用Redis来生成订单号的实践。Redis是一个高性能的键值存储系统,常用于缓存和实时数据操作,其速度快,适合处理高并发场景下的订单号生成。 ...

    java web在高并发和分布式下实现订单号生成唯一的解决方案

    在高并发和分布式下,实现订单号生成唯一是 Java Web 开发中的一大挑战。为了解决这个问题,我们需要从多方面考虑,包括时间戳、随机数、线程ID、进程ID、MAC 地址、IP 地址、CPU 序列号等。下面我们将详细介绍四种...

    银联订单号永远不会重复的生成算法分析与示例

    为了测试和验证这些算法,可以创建一个数据库表,将订单号字段设置为唯一键,并通过多线程并发请求生成订单号,观察是否会有重复。也可以使用Apache的ab工具进行并发压力测试。 总结来说,银联16位订单号的生成需要...

    C#如何生成唯一订单号

    3. **线程安全**:为了处理并发问题,代码使用了`lock`关键字,确保在同一时刻只有一个线程能执行生成订单号的操作。这避免了多线程环境下可能产生的冲突。 4. **自定义前缀和时间精确度**:`Gener`方法允许设置...

    PHP版本的自动生成有规则的订单号(或编号)

    生成订单号 $orderNo = $date . sprintf('%06d', $sequence); // 5. 更新EveryDaySerialNumber.dat文件 file_put_contents('EveryDaySerialNumber.dat', $sequence); echo "新生成的订单号是:{$orderNo}\n"; ```...

    并发生成重复订单号1

    - 示例代码中的`OrderCodeGenerator`类中,`getOrderCode()`方法结合当前时间戳和自增序列生成订单号。然而,这种方法在多线程环境下存在并发问题,可能导致生成重复的订单号。 2. **并发问题**: - 当多个线程...

    C#生成流水号小代码

    3. **性能考虑**: 在高并发环境下,每次生成流水号都需要查询数据库可能会成为瓶颈。可以考虑缓存最近使用的流水号或采用分布式ID生成方案。 4. **扩展性**: 当流水号的需求发生变化时,如需要包含更多的信息或调整...

    利用asp.net实现生成不重复订单号

    在高并发的环境下,仅依赖时间戳生成订单号可能会遇到冲突的风险,尤其是在高并发的系统中,如果有两个订单几乎在同一毫秒内生成,单纯依靠时间戳就无法确保唯一性了。因此,针对这种情况,可能需要引入额外的策略,...

    Java高并发秒杀API

    Java高并发秒杀API是一个典型的企业级应用场景,主要用于处理大量用户在同一时间抢购限量商品的情况。在设计这样的系统时,我们需要关注多个关键知识点,包括但不限于数据库操作、并发控制、性能优化以及分布式协调...

    C#实现在购物车系统中生成不重复订单号的方法

    3. **分布式锁**:在多服务器环境下,可以使用分布式锁(如Redis或Zookeeper)来确保在同一时刻只有一个服务器能够生成订单号,避免并发冲突。 4. **UUID/Guid**:生成全局唯一标识符(UUID或Guid),虽然它们看...

    流水号生成软件

    3. **可扩展性**:随着业务的增长,流水号生成软件应能处理大量并发请求,保证高效率。 4. **安全性**:考虑到流水号可能涉及到敏感信息,如订单号、会员ID等,软件需要有相应的安全措施,防止被恶意预测或篡改。 ...

    Android-给集群环境下生产一定命名规范下的id如订单号等

    在Android开发中,特别是在大型分布式系统环境中,生成具有特定命名规范的唯一ID,例如订单号,是一项关键任务。这样的ID不仅需要确保全局唯一性,还要符合业务规则,以便于跟踪和管理。在这种背景下,"Android-给...

    php生成唯一订单ID号的程序源码压缩包

    之前看到网上有个类似的,拿来试了试进行了一些修改,发现在windows上重复率很高,于是花了些时间排查,所以在这里做个笔记。...getOrder()为生成订单的方法,连续生成30000个订单号来计算重复率。

    PHP秒杀系统 高并发高性能的极致挑战-

    4. **订单生成**:快速生成订单并确认支付状态,完成交易过程。 #### 三、PHP秒杀系统的架构设计 ##### 3.1 系统架构概述 一个高性能的秒杀系统通常需要采用分布式架构,通过负载均衡器将用户请求分发到多个节点...

Global site tag (gtag.js) - Google Analytics