例如,假设您向几千名订阅者发送简报,并宣传“点击此链接的第一百个获得10%的折扣”。作为一个极端的例子,假设数秒的点击在几秒钟内到达。正确的方法是确保在完全锁定第100次点击之后,101或102位客户无法获得“祝贺获得折扣信息”
答案 0 :(得分:4)
您可以创建一个锁文件并flock($fp, LOCK_EX)
来确保只有一个(PHP)进程可以同时打开它。
成功锁定文件后,您将处理该请求,并在完成后flock($fp, LOCK_UN)
。
$fp
是fopen()
返回的文件句柄。
当然你也可以使用互斥锁,但默认情况下它们不会在PHP中启用。
以下是鸡群解决方案的流程“图表”:
答案 1 :(得分:3)
有一张表,您可以在其中写下答案。然后很容易检查一个特定的响应是否在前100个 - 只需看看它是否在前100行中按相应的字段排序。
让MySQL为您完成锁定的所有艰苦工作!
答案 2 :(得分:0)
您可以拥有BEFORE INSERT
触发器,如果它超过100,则从另一个表Can you access the auto increment value in MySQL within one statement?和abort中提取自动增量。