2021-01-15 记一次微信支付订单号重复问题

本文讲述了作者在系统中遇到订单号重复问题,通过排查日志和微信支付jar异常,决定采用雪花算法生成唯一订单号。介绍了雪花算法的工作原理,以及如何在业务场景中应用以减少重复并提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

今天系统突然出现订单号重复的问题,但通过日志观察,并没发现订单号有重复的(使用redis的incr生成),于是猜测可能是之前测试的时候用过这些订单号,但未支付的订单在商户上也查不到,所以最终只能通过代码的方式来处理。


处理

因为用的是第三方封装的微信支付jar,所以通过捕获其异常,如果是订单号重复,那么就重新生成订单号再次下单。


雪花算法

不过try-catch来处理,每次下单也是需要耗费时间的
于是参考了雪花算法,据说只要是时间不回溯,编号就不会重复,可以看看这篇文章,感觉还不错

  • 个人理解

一个long(64bit),由几部分组成
1bit(符号位)
41bit(毫秒数)
10bit(机器标识[机房id + 机器id 或跟业务相关的id])
12bit(序列号[如果1ms进入多个请求就根据这个来区别])
由上可知主导还是时间,只要时间不回去的话,重复的概率还是很低的,而且这个生成不依赖于数据库(我是依赖于redis),方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值