首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定唯一折扣代码的列表,如何只发送一次

给定唯一折扣代码的列表,如何只发送一次
EN

Stack Overflow用户
提问于 2015-03-20 23:31:19
回答 1查看 175关注 0票数 0

我想知道解决这个问题的最佳方法:给出一个电子商务网站预先生成的500个唯一折扣代码列表,我如何确保首批500个收到折扣代码的用户每人都得到一个唯一的折扣码?电子商务站点将向一个单独的服务器发出异步请求,并将折扣代码列表存储在其数据库中。这是这个服务器的工作,确保它只发回每一个折扣代码一次,按时间顺序收到的请求。

由于这似乎是一个相当原始的问题,我想知道是否有一个聪明和优雅的方法来做到这一点,相对较低的努力水平。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-20 23:48:36

如果您的DB有原子事务,这是没有问题的。只需使用两个字段( code (varchar宽度足以容纳代码)和used (布尔值)创建一个表used,然后由usedcode进行索引。最初,INSERT 500行,当然每个行都带有used = false。每当请求出现时,只要是SELECT min(code) FROM discount FOR UPDATE WHERE NOT used,然后是UPDATE discount SET used = true WHERE NOT used AND code = <that code>,都在单个DB事务中。(更新的NOT used部分对于正确性来说并不是必需的,但是可以通过启用索引来加快速度。)

如果争用是一个问题(我不知道如何处理500个请求,但可能会出现争用),那么向表中添加一个包含1到500之间的唯一整数的整数id字段。然后,在每个请求中,选择一个介于1到500之间的随机数rSELECT min(code) FROM discount FOR UPDATE WHERE NOT used AND (id >= <r> OR id + 500 >= <r>)。括号中的条件确保搜索将“环绕”到更低编号的折扣,前提是(并且只有当)所有折扣>= r已经被接受。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29177386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档