时间:2021-07-01 10:21:17 帮助过:542人阅读
A. 提前生成一批券码(数据库中该字段添加唯一索引),这样保证了券码的唯一性,通过后台脚本预判断券码数量小于某个值,重新生成一批券码
B. 结合redis的方案, 通过redis 设置游标, 以八位的券码为例, 找出最大的八位质数,然后通过质数算法 和 游标 计算出八位的券码,但是该方法不能保证的券码的唯一性 有可能出现重复
A 方案能保证唯一 但是维护困难 B方案不能保证唯一性
大家还有什么好的算法推荐吗?
项目中遇到需要生成唯一券码的方案.目前有两种生成券码的方案 :
A. 提前生成一批券码(数据库中该字段添加唯一索引),这样保证了券码的唯一性,通过后台脚本预判断券码数量小于某个值,重新生成一批券码
B. 结合redis的方案, 通过redis 设置游标, 以八位的券码为例, 找出最大的八位质数,然后通过质数算法 和 游标 计算出八位的券码,但是该方法不能保证的券码的唯一性 有可能出现重复
A 方案能保证唯一 但是维护困难 B方案不能保证唯一性
大家还有什么好的算法推荐吗?
时间戳,随机数,哈希函数,用户信息(例如用户的ID,请求的IP什么的)等等……
看具体情况,组合起来用,基本可以实现每次生成的券码不重复。
如果要求比较高,可以建个表,建唯一索引,生成之后试着插入进去就能验证是否重复了。
(如果重复了,就再重新生成随机数,重新计算生成一次就好了。)
提前算什么的,代码复杂,且逗比,还是需要的时候即时计算比较好。
跟时间有关的东西就会是唯一的吧
可以用redis的自增操作,是原子性的,不会重复;如果长些也行就用uuid