@
haython 并不是所有的优惠券系统都是每个用户只能用一张或者只能用几张的
@
mokeyjay 我做过字符形式的,后来因为字符存储比较占数据库空间(数据库几个字符串占空间都考虑了你自己衡量一下商城量级吧不能透露更多了),最后变成存储纯数字,显示是字符串的(自己写了个一对一的算法把数字翻译成字符串),最后本质也是纯数字的优惠券
变更过多种生成方案,然后进行综合执行速度、还有重码分析,最后得出的方案还是单纯的 rand(1000000000000,9999999999999)的综合开销最低,远低于其他几种方案综合开销,重复率其实很低
另外,你说的没一个先 select 冲突之类的,说明你对 mysql 运用还不够精
直接用 INSERT IGNORE INTO 一大批,然后记录实际插入量,比计划的少的就是重复的,再次进行插入即可。
记录实际插入量,单点 MYSQL 可以用 AFFECTED ROWS ,我们这边是分布式的后面数据架构比较乱, AFFECTED_ROWS 不太好用,所以使用的方法是每次插入生成一个 job 做一个批次号,然后去查询这个批次已经生成多少,缺的继续补足