怎样保证生成10位唯一订单号?

发布于 2022-09-11 18:33:25 字数 339 浏览 22 评论 0

订单号规则
第1位随机1-9;
第2位,我自己在程序中根据业务指定;1,2,3,4,5,6,7,8,9
剩下的3-10位都随机。
怎样保证唯一性呢?

我有一个办法,就是每次生成之前,先随机一把,然后去订单表里面查一下是否有重复的,有就再随机一把,再查,直到没有一样的,然后在保存订单到数据库。

这种效果咋样,数据多了,是不是影响性能。订单表最多允许500万数据吧,用户20万。web金融业务,用户不是长期在线那种,每天每个用户也就平均登陆5次。

系统只保存最近3个月订单,多了就转移到一个历史数据里面,不让订单表无限扩大。

现在纠结的是这样做,会不会很影响性能?目前没更好的想法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

遥远的她 2022-09-18 18:33:25

业务编号1-9 + 时间戳 + 用户id
一个用户在某个业务某一秒内只能一下一单,并且不会出现重复

南…巷孤猫 2022-09-18 18:33:25

最好就是不要随机,要制定一个规则。
第一位代表什么,后面几位代表什么,并且保证新订单号有某种形式的自增来避免重复。
可以搜一下订单号的生成规则,会有些启发的。

感情洁癖 2022-09-18 18:33:25

会影响性能,因为你的查询次数不可预料。随着写入的订单数越来越多,生成的订单ID的冲突概率也越来越高
建议用时间戳+自增数字+随机数的方式来填充剩下的3~10位,类似于Snowflake算法的思路

放低过去 2022-09-18 18:33:25
//10位我感觉有点短
md5(md5(time().str_random(16) . session_create_id() . uniqid() . mt_rand(10000,99999)) . session_create_id())

``
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文