首页 新闻 搜索 专区 学院

问个问题,关于按格式生成订单号的,就是年月日+当前笔数的格式如何保证效率

0
悬赏园豆:5 [待解决问题]

比如订单号:JY202003200021
代表的是 20200220第21笔订单

假设生成单号的时候临时去 count table 统计订单数,必定会造成数据库锁死的问题,因为查询条件复杂,要筛选时间+商家编号。这种方案铁定不行

那我该如何保证单号唯一性而又不影响数据库呢?我可以允许有时候某个单号和实际笔数对不上。
我生成这种格式的单号主要是为了方便用户沟通的时候说单号,比如用雪花算法这种的方式生成的话,单号太长了,客服和客服沟通一下某某单号出问题,要是拿嘴巴说的话,报单号都得报死人。。。。。

LoveCoder的主页 LoveCoder | 初学一级 | 园豆:6
提问于:2020-03-21 14:37
< >
分享
所有回答(3)
0

如果一定要当前年月日+当天订单笔数这种格式,为了不查数据库,可以考虑把每天的订单数量用redis计数,直接从redis里获取数量, key为每一天日期,例如 order_count_20200321

风行天下12 | 园豆:3485 (老鸟四级) | 2020-03-21 14:48

谢谢回复。
如果这么一来,有一个新的问题出现,会不会存在某笔订单号生成成功了,redis计数失败了。然后导致了下笔订单号与当前订单号重复呢?所以这里面是不是又得有一个东西,大概就是保证事务的一致性。

支持(0) 反对(0) LoveCoder | 园豆:6 (初学一级) | 2020-03-21 14:55

@LoveCoder: 要使用订单笔数来作为订单号,那就得保持一致性

支持(0) 反对(0) 风行天下12 | 园豆:3485 (老鸟四级) | 2020-03-21 15:03
0

订单号带时间标识是可以的 但是你后面的21 想带上比较困难,在高并发的情况下 这个很容易失控 如果是订单号 可以看看这篇博客https://www.cnblogs.com/zhou-920644981/p/12202391.html

初夏的阳光丶 | 园豆:573 (小虾三级) | 2020-03-23 10:47
0

如果是为了报单号方便,可以在最后增加n个随机字符
服务端可以按照这个随机字符查询
这样大概率会匹配到, 重复的二次确认一下就行。

kevinzhwl | 园豆:304 (菜鸟二级) | 2020-03-23 11:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册