发布网友 发布时间:2022-12-04 09:22
共1个回答
热心网友 时间:2024-10-30 21:02
公司老的系统原先采用的时间戳生成订单号,导致了如下情形
打断一下:大家知道怎么查系统某项重复的数据吧
不得了,这样重复岂不是一单成功三方回调导致另一单也成功了。
多个服务怎么保证生成的订单号唯一呢?
先上code
以上是采用snowflake算法生成分布式唯一ID
41-bit的时间可以表示 (1L<<41)/(1000L360024*365)=69 年的时间,10-bit机器可以分别表示1024台机器。如果我们对IDC划分有需求,还可以将10-bit分5-bit给IDC,分5-bit给工作机器。
这样就可以表示32个IDC,每个IDC下可以有32台机器,可以根据自身需求定义。12个自增序列号可以表示 2^12 个ID,理论上snowflake方案的QPS约为 409.6w/s ,这种分配方式可以保证在任何一个IDC的任何一台机器在任意毫秒内生成的ID都是不同的。
这种方式的优缺点是:
优点:
缺点:
一般来说,采用这种方案就解决了。
还有诸如,mysql的 auto_increment策略,redis的INCR,zookeeper的单一节点修改版本号递增,以及zookeeper的持久顺序节点。
热心网友 时间:2024-10-30 21:02
公司老的系统原先采用的时间戳生成订单号,导致了如下情形
打断一下:大家知道怎么查系统某项重复的数据吧
不得了,这样重复岂不是一单成功三方回调导致另一单也成功了。
多个服务怎么保证生成的订单号唯一呢?
先上code
以上是采用snowflake算法生成分布式唯一ID
41-bit的时间可以表示 (1L<<41)/(1000L360024*365)=69 年的时间,10-bit机器可以分别表示1024台机器。如果我们对IDC划分有需求,还可以将10-bit分5-bit给IDC,分5-bit给工作机器。
这样就可以表示32个IDC,每个IDC下可以有32台机器,可以根据自身需求定义。12个自增序列号可以表示 2^12 个ID,理论上snowflake方案的QPS约为 409.6w/s ,这种分配方式可以保证在任何一个IDC的任何一台机器在任意毫秒内生成的ID都是不同的。
这种方式的优缺点是:
优点:
缺点:
一般来说,采用这种方案就解决了。
还有诸如,mysql的 auto_increment策略,redis的INCR,zookeeper的单一节点修改版本号递增,以及zookeeper的持久顺序节点。
热心网友 时间:2024-10-30 21:02
公司老的系统原先采用的时间戳生成订单号,导致了如下情形
打断一下:大家知道怎么查系统某项重复的数据吧
不得了,这样重复岂不是一单成功三方回调导致另一单也成功了。
多个服务怎么保证生成的订单号唯一呢?
先上code
以上是采用snowflake算法生成分布式唯一ID
41-bit的时间可以表示 (1L<<41)/(1000L360024*365)=69 年的时间,10-bit机器可以分别表示1024台机器。如果我们对IDC划分有需求,还可以将10-bit分5-bit给IDC,分5-bit给工作机器。
这样就可以表示32个IDC,每个IDC下可以有32台机器,可以根据自身需求定义。12个自增序列号可以表示 2^12 个ID,理论上snowflake方案的QPS约为 409.6w/s ,这种分配方式可以保证在任何一个IDC的任何一台机器在任意毫秒内生成的ID都是不同的。
这种方式的优缺点是:
优点:
缺点:
一般来说,采用这种方案就解决了。
还有诸如,mysql的 auto_increment策略,redis的INCR,zookeeper的单一节点修改版本号递增,以及zookeeper的持久顺序节点。