目前用的是这个办法生成的唯一订单号
date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
最近发现会出现重复的,造成异常
然后我想用自增ID做,这样的话就不会有重复了
在用户提交订单时,先查询当前id数,然后缓存,如果没有缓存先缓存,有缓存就直接在缓存里拿到这个ID再生成订单号
这样做对效率有影响吗?
还是有其他什么更好的办法
目前用的是这个办法生成的唯一订单号
date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
最近发现会出现重复的,造成异常
然后我想用自增ID做,这样的话就不会有重复了
在用户提交订单时,先查询当前id数,然后缓存,如果没有缓存先缓存,有缓存就直接在缓存里拿到这个ID再生成订单号
这样做对效率有影响吗?
还是有其他什么更好的办法
精确到年月日时分秒毫秒然后再拼接str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);这样控制在一毫秒内,重复的概率就大大缩小了
自增ID不是唯一办法,当你要分表后还保留订单对其他的唯一关联,自增ID就无用了,因为每个分表都有自增。
ID这个东西不局限于INT的,因为它不展示给用户。可以用 sha1(uniqid('d', true))
这种唯一字符串来保证。
生成订单号就用另一个方法,不用拼接的。
年月日时分秒这种实际是很容易重复的。
发表下个人看法。(逃)
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答1.4k 阅读✓ 已解决
792 阅读
639 阅读
date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
同一天里的单子靠不到 100K 的随机数分配?天哪,怎么想的?
略微有丢丢常识的都知道最常用的 ID 分配就是数字递增吧?
总觉得如今的 PHP 问题是越来越水了。。。