目前用的是这个办法生成的唯一订单号
date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
最近发现会出现重复的,造成异常
然后我想用自增ID做,这样的话就不会有重复了
在用户提交订单时,先查询当前id数,然后缓存,如果没有缓存先缓存,有缓存就直接在缓存里拿到这个ID再生成订单号
这样做对效率有影响吗?还是有其他什么更好的办法
9 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
同一天里的单子靠不到 100K 的随机数分配?天哪,怎么想的?
略微有丢丢常识的都知道最常用的 ID 分配就是数字递增吧?
总觉得如今的 PHP 问题是越来越水了。。。
翻阅古今
TA贡献1780条经验 获得超5个赞
精确到年月日时分秒毫秒然后再拼接str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);这样控制在一毫秒内,重复的概率就大大缩小了
万千封印
TA贡献1891条经验 获得超3个赞
自增ID不是唯一办法,当你要分表后还保留订单对其他的唯一关联,自增ID就无用了,因为每个分表都有自增。
ID这个东西不局限于INT的,因为它不展示给用户。可以用 sha1(uniqid('d', true))
这种唯一字符串来保证。
生成订单号就用另一个方法,不用拼接的。
年月日时分秒这种实际是很容易重复的。
发表下个人看法。(逃)
- 9 回答
- 0 关注
- 586 浏览
添加回答
举报
0/150
提交
取消