Php 一次性代码的原子/安全服务

Php 一次性代码的原子/安全服务,php,python,mysql,amazon-web-services,sequence,Php,Python,Mysql,Amazon Web Services,Sequence,我有一个与我合作的电子商务网站的一次性折扣代码列表。我需要在我的网站上设置一个页面,在那里我的用户可以填写表格,然后将获得其中一个代码。代码是预先确定的,并已通过文本文件发送给我;我不能在运行中生成它们。我需要找出从列表中获取未使用代码的最佳方法,然后同时将其从列表中删除(或更新标志以将其标记为已使用),以避免给两个人提供相同代码的可能性。换句话说,类似于队列,我可以从队列中原子地删除一个项目 这个webapp将在AWS上运行,当前的代码是Python(不过如果必要的话,我可能会使用其他东西;P

我有一个与我合作的电子商务网站的一次性折扣代码列表。我需要在我的网站上设置一个页面,在那里我的用户可以填写表格,然后将获得其中一个代码。代码是预先确定的,并已通过文本文件发送给我;我不能在运行中生成它们。我需要找出从列表中获取未使用代码的最佳方法,然后同时将其从列表中删除(或更新标志以将其标记为已使用),以避免给两个人提供相同代码的可能性。换句话说,类似于队列,我可以从队列中原子地删除一个项目


这个webapp将在AWS上运行,当前的代码是Python(不过如果必要的话,我可能会使用其他东西;PHP将很容易)。理想情况下,我会使用一个AWS服务或mysql来实现这一点,但如果其他解决方案不需要集成的话,我愿意使用它们。因为我想到了“队列”,SQS突然出现在我的脑海中,但这显然不是它的目的(例如,队列中剩余消息的14天限制对我来说肯定不起作用)。虽然我希望流量非常小(这意味着即使是真正的黑客解决方案也可能有效),但我宁愿学习正确的方法,即使在规模上也是如此。

我不能给出实际的代码示例,但最简单的方法之一就是在文件中添加一个递增计数器,例如

0
code1
code2
code3
etc
而且每次使用代码时都跳过那么多行


您也可以在数据库中简单地执行此操作,Amazon DynamoDB是来自AWS的一个快速的NoSQL数据库,它可能非常适合此用例。设置数据库表很容易,您可以将代码加载到其中。DynamoDB有一个函数,允许您在相同的原子操作中检索数据(通过将
ReturnValues
参数设置为
ALL\u OLD
)。这将允许您一次性获取和删除代码,因此其他请求/进程无法获取相同的代码。AWS发布官方SDK来帮助您连接和使用他们的服务,包括Python和PHP SDK(请参阅)。

我认为这里不需要严格的队列。如果您给每台服务器一大块代码列表,并让它们在代码列表不足时要求重新填充代码,那么可能不会造成问题,尽管在列表结束时,您需要处理代码位,并且一些服务器需要使用已经分发给其他服务器的代码。(注意:我不是云计算或您的应用程序方面的专家。)我对此感到困惑。即使我给每台服务器提供了自己的代码列表,该服务器也可能同时收到多个请求(或者至少与一台服务器在另一台服务器更新数据库之前请求代码的时间足够接近,以表明代码已被使用)。这才是我问题的根源。我遗漏了什么吗?这是多线程的吗?多重处理?在单个多线程服务器中进行协调非常容易;您可以在代码列表中使用一组代码或索引。不过,我不知道最好的做法是什么。